これは、アプリケーションを理解しやすくし、コードを整理しておくことの一部であり、個人的な好みの問題でもあります。
AddressBook.appのような単純なアプリケーションは、単一のコントローラーレイヤーオブジェクトでうまくいく可能性があります。このオブジェクトは、ユーザーとユーザーおよびグループとの対話を管理できます。また、PersonコントローラーとGroupコントローラーがあり、それぞれがそれぞれのUI(グループUIからグループコントローラーなど)とデータコンテナー(グループのリストとユーザーのリスト)の間の相互作用を調整します。また、グループを表示する場合は、そのグループに属するユーザーのリスト)。わざわざここまで進んでいる場合は、グループや人々に固有ではないコードを隠しておくためのウィンドウコントローラーがあるかもしれません。つまり、グループモードと個人モードの間のUIの再構成を管理するコードは、このUIを含むウィンドウのウィンドウコントローラーに配置される可能性があります。
複雑なアプリケーションには、多数のコントローラーが含まれる場合があります。各ウィンドウにコントローラーがあり、ウィンドウは、アプリケーションの1つの側面専用の自己完結型のコントロールセットの各インスタンスにコントローラーを所有している場合があります。UI以外のアイテム(ネットワーク接続/ダウンロード、ユーザーセッション、接続された周辺機器の物理的状態など)を管理するコントローラーが含まれている場合があります。それは本当にあなたのアプリケーションとデザインのニーズに依存します。
アプリケーションアーキテクチャは、ソフトウェア開発の重要視されていない側面です。アプリケーションの存続期間にわたって優れたアーキテクチャを選択して維持することは、「この機能を1日で追加できる」と「アプリを追加できるようにするには、アプリの一部/半分/ほとんどを完全に書き直す必要がある」の違いを意味する場合があります。この機能のようなもの」。それは科学と芸術の一部であり、単に経験を積むだけです(そして、例としてお気に入りのオープンソースプロジェクトのアーキテクチャに目を光らせておいてください)。
覚えておくべき重要なことは次のとおりです。コントローラーレイヤーは、アプリに最も固有のレイヤーです(通常、再利用性が最も低い部分-NSArrayControllerのような意図的に再利用可能なコントローラーは耐えられません)。それがあなたのアプリをあなたのアプリにするものです。そのモデルは他のアプリやそのビューにも再利用できる可能性がありますが、コントローラーレイヤーはアプリの「魂」です。
これがお役に立てば幸いです。