0

私は懸念を分けることに関しては、一つの固い問題があります。 クリーンアーキテクチャーアプローチ(Bob Uncle)の問題に近づいている典型的な3層アーキテクチャ(モデル、ビュー、プレゼンター)では、モデル/データの結合方法は何ですか?ここに典型的な例があります。 Pencilのテーブルには、共有されているかどうかにかかわらず情報が保持されていないため、その情報はPencilPropertiesなどの別のテーブルに格納されます。次に、ドメインモデル(PencilModel)を作成するとき、このPencilPropertiesテーブルに依存するisSharedフィールドを設定する適切な方法は何ですか?モデルやエンティティの結合?

私は、データマッパークラスを介してPencilDatabaseObjectとPencilModelの間にデータをマッピングするだけのリポジトリを使用しています。私はツリー工場エンティティからプロパティを取得するように、工場や樹木の間をマッピングする必要が

Plant 
-> id 
-> name 

Tree 
-> id 
-> plant_id 
-> plant_name 

その時点で:

別の例では、我々は2つのオブジェクトを持っている、でしょうか? この時点でデータマッパー内のデータベースにアクセスすることは、SOLIDに関しては間違っているようです。

ありがとうございます。

答えて

1

したがって、いずれの場合も、Pencil,PencilProperties,PlantおよびTreeがデータエンティティです。リポジトリはデータを取得する責任があります。リポジトリがデータベース、ORM、または辞書であるかどうかは関係ありません)。重要なのは、それを実装する方法だけです。

は(C#のLINQを言い訳が、それは、Javaに十分に近いです)リポジトリが単にisSharedをフェッチするかもしれないので、実装のために :

あなたがそれをマップする必要がある場合についてはvar pencilIsShared = _pencilRepository.First().IsShared;

、簡単な答えは、あなたのPencilPencilRepositoryよりも変更する可能性が低いので、あなたが依存関係を反転し、あなたがPencilRepositoryインタフェースを持っていることを確認したいと思うでしょう「あなたのリポジトリに」、

あり、そして、あなたのPencilRepositoryImpl implemen Pencilが共有されているかどうかにかかわらず、あなたに返す人になります。

データマッパーでデータベースにアクセスする上での懸念事項として、マッパーロジックをリポジトリに組み込み、マッパーを抽象化して、もはやSRPに違反しないようにします。下のリンクを参照してください。

リポジトリパターン

この1つはかなりきれいです:https://medium.com/@krzychukosobudzki/repository-design-pattern-bc490b256006

関連する問題