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# コード インターフェイスは、デカップリングの推奨されるアプローチですが、デリゲートを使用するこのアプローチは、関数型プログラミングに傾いています。後続の開発者が、彼らにとって直感に反するアプローチについて息を切らして罵倒する可能性はありますか?