Python / PyQt で書かれた非常にデータ中心のアプリケーションがあります。主にまだ実際のテストが実施されておらず、明らかに変更する必要があるため、UI をコアから実際に分離するためにリファクタリングを行う予定です。
すでにある程度の分離があり、かなりの数のことを正しい方法で行ったと思いますが、完璧にはほど遠いです. どのようなことが私を悩ませているかを示すために、2 つの例を示します。
ユーザーがデータ オブジェクトの表現を右クリックすると、ポップアップするコンテキスト メニューがデータ オブジェクトによって作成されますが、このデータ オブジェクト (基本的にデータベース行の ORM 表現) は明らかに UI とは関係ありません。 .
データベースに何かが書き込まれ、書き込みが失敗した場合 (たとえば、データベース レコードが別のユーザーによってロックされているため)、従来の「再試行/中止」メッセージ ボックスがユーザーに表示されます。このダイアログは、データ プロバイダー* によって作成されますが、プロバイダーには UI 機能がないことは明らかです。明らかに、プロバイダーは代わりに例外を発生させたり、失敗を示したりすることができ、UI はそれをキャッチしてそれに応じて動作することができます。
* これは、基本的にデータベース テーブルを表し、そのデータ オブジェクトとデータベース エンジンの間を仲介するオブジェクトに対して使用する言葉です。それが通常「プロバイダー」と呼ばれるものかどうかはわかりません
私はテストの経験がないので、テスト可能性の問題などを簡単に「感じる」ことはありませんが、それに入る前に、いくつかの再編成を行う必要があります。
関連する複雑なビジネス ロジックはありません (主に CRU D だけです。はい、D がなくても) 。
私の計画は、Qt インターフェースの代わりに Web フロントエンドまたはテキストベースのインターフェースに置き換えるために、UI 部分を簡単に切り取ることができるという考えを念頭に置いてリファクタリングを開始することです。一方、Qt 自体は依然としてコアによって使用されます。これは、シグナル/スロット メカニズムがかなりの数の場所で使用されているためchanged
です。
それで、私の質問: それはテスト容易性と保守性を向上させるための実行可能なアプローチですか? 特にPythonを念頭に置いて、他に何かコメントはありますか?