この用語は「オブジェクト指向」であり、問題のごく一部をカプセル化するオブジェクトのクラスを定義することにより、大きな複雑な問題を小さな問題に分解します。オブジェクトが相互作用する方法はメッセージの受け渡しであり、オブジェクトはメッセージを渡す他のオブジェクトを、それらに含まれるオブジェクトから開始することによって見つけます。
問題が大きく複雑になるほど、問題を管理可能な部分に分解するために必要な作業が増えるため、より多くのオブジェクトのレイヤーが得られます。小さな単純な問題がひどく多数のオブジェクトに分解されることがありますが、それはオブジェクト指向自体をアンチパターンにしません。
主な問題は、無関係なデータを含めるだけでなく、ネストによってデータオブジェクトが大きくなりすぎることです。例:鳥を並べ替えている場合、単純な鳥のオブジェクトではなく、羽、くちばし、possibleParasites、air、possibleHousesNestsCanBeIn、foodTypesを含むオブジェクトの鳥を受け取ります。食品の種類には果物、昆虫、ワーム、種子、種子にはオーク、ニレが含まれます、アザミ、possibleAnimalsThatCanEatSeedsなど– </ p>
キッチンシンクマップのアンチパターン以外のすべてがおそらく最も適しています。
多くの複雑なルールを含む複雑なプロセスを考えると、すべて(ビジネスロジック、関連する手順と関連しない手順など)がマップに押し込まれます。
これを解決する最善の方法は、のような強く型付けされたインターフェースを指定するフィルタリング操作を使用することですinterface BirdList extends Iterable<Bird> {}
。クエリシステムは、そのインターフェースをサポートするのに十分なデータに裏打ちされた実装を提供します。
APIは、BirdList
やなどのさまざまなインターフェースを提供できます。クライアントは必要なインターフェースのリストを作成でき、クエリシステムはそれらを分析してデータをフェッチし、プロキシクラスを使用してクエリを公開する実装クラスをアセンブルします。タイプセーフな方法になります。BirdFeedingHabitMap
BirdNestingHabitMap