ドメインドリブンデザインで、ドメイン(名前空間)をどのように分解しますか?
-
03-07-2019 - |
質問
ドメインドリブンデザインでドメイン(名前空間)をどのように分解しますか?
次の概念に移行しています:
Project.Entity
Project.Entity.Abstracts
Project.Entity.Entities
Project.Entity.Extensions
Project.Entity.Immutables
Project.Entity.Interfaces
Project.Entity.Repositories
たとえば、CMSに「コンテンツ」というエンティティがあります。したがって、Project.Contentというプロジェクトを作成し、クラスを次のようにファクタリングします。
interface IContent
class Content : IContent
interface IContentRepository
class ContentRepository : IContentRepository
この" Content"エンティティモデルには独自の名前空間があります。
しかし、「エンティティ」の多数のプロジェクト(トライ18)を含む大規模なエンタープライズ環境では、拡張性が不十分であることがわかりました。モデル。私は十数個のプロジェクトで解決することになりますが、そのうちのいくつかは2つまたは3つのクラスしか持っていません(つまり、UrlRewriter)。また、インターフェイスだけのために他のプロジェクトを参照していることに気付きました。これは私のドメインを汚染しているように感じます。具象参照ではありませんが、循環参照を避けるのは難しい場合があります。
だから、「レイヤー」に戻ります。時々コンセプト...
他のDDDの専門家がエンタープライズサイズのアプリケーションをどのように考慮しているかを知りたい。本や記事をお気軽にお勧めします。
事前に感謝します!
解決
私がやると思うのは、境界付けられたコンテキストを識別するものを追加することです。
理由が明確であることを確認するには、境界のあるコンテキストで両方のリンクを確認します。 http://dddcommunity.org/discussion/messageboardarchive/BoundedContext.html 、 http://devlicio.us/blogs/casey/ archive / 2009/02/11 / ddd-bounded-contexts.aspx
他のヒント
.NETガイドラインに従って使用します。それらは非常に直感的であり、不要なものをインポートする必要がないように名前空間を設定できます。
機能レベルに厳密な命名規則を課すことはありません。それぞれの異なるプロジェクトの設計がそれをガイドする必要があります。
あなたと同じように、プロジェクトを大量に処理するのは管理が面倒になることがわかりました。 私は
が好きですProject.Domain
Project.DataAccess
Project.Presentation (presenters and such)
Project.Gui (in case of a winforms app)
セットアップ。
物事が単純になれば、物事が悪くなったときに大いに役立ちます。
問題は、別のプロジェクトを作成するときに何が得られるかです。 (これは非常に簡単で、ほとんど簡単です)
そのプロジェクトを単独で使用したいかどうか。最終的に.dllが生成される可能性があるため、まったく同じバージョンなどでなくてもデプロイすることはできません。その場合、IDEを分割して混乱させる理由はほとんどありません)
必要に応じて、後から新しいプロジェクトにいつでも移動できますが、それは多少苦痛ですが、その時までには、それが行われているという感覚だけでなく、それを行う正当な理由があります。