GUIアプリケーションを書くときには、アプリケーションを「制御」または「調整」するトップレベルのクラスを使用します。トップクラスのクラスは、ネットワーク接続の初期化、アプリケーション全体のUIアクションの処理、設定ファイルのロードなどの調整を行います。デカップリングにインターフェイスの代わりにデリゲートを使用する。良いアイデア?
GUIアプリケーションコントロールの特定の段階では、メインクラスユーザーが認証すると、ログイン画面からデータ入力画面に切り替わります。異なるクラスは、トップレベルコントロールが所有するオブジェクトの機能を使用する必要があります。過去には、オブジェクトを下位のコントロールに渡すか、インターフェイスを作成するだけでした。ユニットテスト、
- :最近、私はされている2つの主な理由と方法の代表者の代わりに、全体のオブジェクトを渡すことに変更しました従属クラスがどのメソッドを使用しているかを正確にクラスコンストラクタに記録します。
いくつかの簡単な例のコードは以下の通りです:
delegate bool LoginDelegate(string username, string password);
delegate void UpdateDataDelegate(BizData data);
delegate void PrintDataDelegate(BizData data);
class MainScreen {
private MyNetwork m_network;
private MyPrinter m_printer;
private LoginScreen m_loginScreen;
private DataEntryScreen m_dataEntryScreen;
public MainScreen() {
m_network = new Network();
m_printer = new Printer();
m_loginScreen = new LoginScreen(m_network.Login);
m_dataEntryScreen = new DataEntryScreen(m_network.Update, m_printer.Print);
}
}
class LoginScreen {
LoginDelegate Login_External;
public LoginScreen(LoginDelegate login) {
Login_External = login
}
}
class DataEntryScreen {
UpdateDataDelegate UpdateData_External;
PrintDataDelegate PrintData_External;
public DataEntryScreen(UpdateDataDelegate updateData, PrintDataDelegate printData) {
UpdateData_External = updateData;
PrintData_External = printData;
}
}
私の質問は、私はこのアプローチを好むとしながら、それを見つけるつもりに沿って来て、次の開発者がどのように私には良い理にかなっていることでしょうか?サンプルとオープンソースのC#コードインタフェースは、デカップリングに適したアプローチですが、デリゲートを使用するこのアプローチは、関数型プログラミングに向いています。私は後続の開発者に、直感的なアプローチであることを黙って誓っているでしょうか?私は確かにインターフェイスではなく、デリゲートを使用してのプラス側を見ることができますが
私は、代議員を模倣するための模造フレームワークは必要ないと主張します。テストで必要なものを返すデリゲートを作成するだけです。私はC#でこれらのフレームワークの経験はありませんが、使用するには十分簡単かもしれませんが、代理人を手作業で模擬することの利点と容易さを見ることができます。 – Kevlar
mockingフレームワークの他の面は、メソッドを呼び出したことを確認するだけでなく、テストコードとモック設定などの違いが明確であることを確認します。 –
OOと機能のミックスに関するコメントには同意しませんアプローチ。実際、より多くの人々が多くのアプリケーション内でこれらの2つのアプローチに関する知識を共有できるようになれば、クラス、モジュール、名前空間などでよりよく分散された責任で、抽象的で分離されたコードのケースがさらに増えます。これは、さまざまな言語に適用されます。 –