プログラマーとして、私たちの目標は、与えられたドメインモデルとビジネスロジックを適切に抽象化することだと思います。しかし、この抽象化はどこで止めるべきですか?抽象化とそのすべての利点(柔軟性、変更の容易さなど)と、コードとそのすべての利点の理解の容易さとの間でトレードオフを行う方法。
私は過度に抽象化されたコードを書く傾向があり、それがどれほど良いのかわかりません。私はよく、2つの部分で構成されるマイクロフレームワークのようなものを書く傾向があります。
- マイクロフレームワークに接続されたマイクロモジュール:これらのモジュールは、単一ユニットとして理解、開発、および保守が容易です。このコードは基本的に、要件で説明されている機能的な機能を実際に実行するコードを表しています。
- 接続コード; 今ここに私は問題があると信じています。このコードは、時には非常に抽象化されていて、最初は理解しにくいため、複雑になる傾向があります。これは、純粋な抽象化、現実のベース、および提示されたコードで実行されるビジネスロジックにすぎないという事実により発生します1。この理由から、このコードはテスト後に変更されることはありません。
これはプログラミングの良いアプローチですか?多くのモジュールで非常に断片化されたコードの変更が非常に理解しやすく、抽象化POVからの変更のないコードは非常に複雑であるということですか?すべてのコードが均一に複雑である(つまり、コード1がより複雑で相互にリンクされ、コード2がより単純である)ため、コードを見ている人は合理的な時間内にそれを理解できますが、変更は高価であるか、上記のソリューションは優れています「コードの変更」は理解、デバッグ、変更が非常に簡単であり、「コードのリンク」は一種の困難です。
注:これはコードの可読性に関するものではありません!1と2のコードはどちらも読み取り可能ですが、2のコードにはより複雑な抽象化があり、コード1には単純な抽象化があります。