あなたが言うように、イベントはクラス間の結合を減らす素晴らしいツールです。そのため、イベントの組み込みサポートなしで一部の言語で追加のコードを記述することができますが、全体像の複雑さは軽減されます。
イベントは間違いなくオブジェクト指向の最も重要なツールの1つです(Alan Kayによれば、オブジェクトはメッセージを送受信することで通信します)。イベントの組み込みサポートを備えた言語を使用する場合、または関数をファーストクラスの市民として扱う場合、それらを使用するのは簡単です。
サポートが組み込まれていない言語でさえ、Observerパターンのようなものの定型的な量はごくわずかです。すべてのアプリケーションで使用できるまともな汎用イベントライブラリをどこかで見つけて、ボイラープレートを最小限に抑えることができます。(汎用イベントアグリゲーターまたはイベントメディエーターは、ほとんどすべての種類のアプリケーションで役立ちます)。
小さなアプリケーションでは価値がありますか?私は間違いなくイエスと言うでしょう。
- クラスを相互に分離しておくと、クラスの依存関係グラフがきれいに保たれます。
- 具体的な依存関係のないクラスは、テスト内の他のクラスを考慮することなく、単独でテストできます。
- 具体的な依存関係のないクラスでは、完全なカバレッジを得るために必要な単体テストが少なくなります。
あなたにしている考え方は、場合、「それは本当にごく小さなアプリケーションですが、それは本当にそれほど重要ではありませんああけど」、考慮してください。
- 小さなアプリケーションは、後に大きなアプリケーションと組み合わされることがあります。
- 小規模なアプリケーションには、少なくとも他のアプリケーションで後で再利用する必要のあるロジックまたはコンポーネントが少なくとも含まれている可能性があります。
- 小規模なアプリケーションの要件は変更される可能性があり、リファクタリングが必要になります。これは、既存のコードを切り離すと容易になります。
- 後で追加機能を追加して、既存のコードを拡張する必要性を促すことができます。これは、既存のコードが既に分離されている場合もはるかに簡単です。
- 疎結合コードは一般に、密結合コードよりも書くのにそれほど時間はかかりません。ただし、密結合コードは、疎結合コードよりもリファクタリングとテストに時間がかかります。
全体として、アプリケーションのサイズは、クラスを疎結合に保つかどうかを決定する要因ではありません。SOLIDの原則は、大規模なアプリケーションだけでなく、あらゆる規模のソフトウェアとコードベースに適用できます。
実際、疎結合クラスを単体でテストするユニットで節約される時間は、それらのクラスの分離に費やされる追加の時間と釣り合うはずです。