あなたのアプローチはうまくいきますが、そのような構成は、DDDビルディングブロックに焦点を当てたコードについての話であり、ドメインの内在する機能に関するものではありません。 DDDでは、ドメインに関する重要なことを示したいので、技術の問題はもう重要な懸案事項ではありません。
私は次の名前空間を作成示唆
:ここ
YourCompany.YourApplicationName.YourParticularBoundedContextName.Application
あなたはすなわち、アプリケーションサービスのすべてのアプリケーションスコープのビルディングブロックを保つことができるとDTOのアプリケーションサービスにパラメータを転送し、そこからデータを返すために使用されています。
YourCompany.YourApplicationName.YourParticularBoundedContextName.Domain
これは、ドメインスコープビルディングブロックのサブネームスペースを作成する名前空間です。 C#で、それがある場合
YourCompany.YourApplicationName.YourParticularBoundedContextName.Domain.AggregateName
各集計が などを、集約ルートクラスが存在した独自の名前空間を持つエンティティと、必要な場合のVOは、この集約、リポジトリのインターフェース、集約工場で内部的に使用私は知りません可能ですが、JavaではAggregateに別のパッケージ(ネームスペース)を持たせることのもう1つの利点があります - Aggregate Rootクラスをパブリックにすることができ、パッケージスコープとして内部的に使用される他のエンティティとVOをすべてパッケージの外部)。保護者があるので、あなたは、誰も破ることはできないことを、あなたの集計のためのパブリックAPIを構築し、この方法:コンパイラ:)
YourCompany.YourApplicationName.YourParticularBoundedContextName.Infrastructure
ここでは、リポジトリの実装のための場所です(集約対応のサブ名前空間内の各)
基本クラスに保存することができます。
YourCompany.YourApplicationName.Domain
、あなたが別のアプリケーションで再利用しようとすることができるようにも別のプロジェクトに保管します。
利点は何ですか?コードを使って作業するときは、技術的側面ではなく機能やドメインに焦点を当てています。 「このプロセスフローはどのように見えるのですか」などの問題に対処する必要があります。「すべてのエンティティとVOを一度に見たい」というコード構造がサポートされています。エンティティ(実際に部品を集約する)とVO(集約パーツ)を別々の名前空間に分けて、何が何を扱っているかについての情報を失った。泥の大きな球で簡単に終わることができます。再利用してはならないものを再利用するからです。
https://github.com/BottegaIT/ddd-leaven-v2 この方法でパッケージ化されたJavaのサンプルプロジェクトです。多分あなたを助けるでしょう。
もう1つの例は、DaughについてのVaughn Vernonの書籍のサンプルである https://github.com/VaughnVernon/IDDD_Samples です。
役立ち記事もあります: http://www.codingthearchitecture.com/2015/03/08/package_by_component_and_architecturally_aligned_testing.html
私は、ドメイン層について話しています。ドメイン層はデータベースを認識していません。したがって、私はあなたが意味することを理解していません。 – w0051977