ここでは粒度に反しますが、このオブジェクトを結果セットにマップしたままにし、結合をデータベースに保持する方が良いと思います。
ビジネス ロジックの場合、「注文」は通常、まとまりのある 1 つの概念です (少なくとも、そのように組み立て始めました)。データが複数のテーブル (またはデータベース) にマップされているという事実は、データのキャプチャ方法の成果物でしょうか? 分割する前に、次の質問を自問します。
- 他のオブジェクトから注文を構成することには具体的な利点がありますか?
- 属性のカーディナリティは異なりますか? つまり、一部は注文ごとで、他は品目ごとですか?
- 構成されたオブジェクトの既存のコードを再利用できますか?
- 複数のオブジェクトでより簡単に行えるその他の操作を有効にしていますか?
これらの質問のいずれにも「はい」と答えない場合は、コードがアトミック オブジェクトとして順序のみを処理し、データベースがその発生元の複雑さを隠蔽できるようにすれば、コードがよりシンプルで読みやすくなると思います (そのためにビューを使用することもできます)。
通常、属性の数が多いからといって、インターフェースを分割する理由にはなりません。ただし、注文オブジェクト自体の複雑さ (またはサイズ) が問題の原因である場合は、次のような一般的なアクセサー メソッドを使用して内部的に単純化することもできます。
private object GetOrderAttribute(string attributeName){
// use a data structure (like a hash table) to store and access internally
}
...
output("Quantity: " + GetOrderAttribute("quantity"));
// etc.
もう 1 つの注意点: パフォーマンスが論理システム設計の最初の関心事になることはめったにありませんが、 DBMS はインデックスやその他のメカニズムを使用して結合を効率的に実行し、ロードを回避できるため、データベース テーブル結合を含むほとんどの場合、データベースが結合を行う場合にパフォーマンスが向上します。必要のないディスクからのページ。個々のクエリもすべてそれを行う可能性がありますが、通常、データベースはビジネス ロジック コードよりも桁違いに効率的に実行できます。(もちろん、結合が物理的なデータベースの境界を越えている場合、その利点は失われる可能性があります。)