2011-02-06 3 views
2

再:S#arp ArchitectureS#arpコマンドのアーキテクチャ:このドメインロジックをどこに置くか

S番号のARPとドメインロジックの特定の種類を置く場所に関するnoobの質問のビット。そう、このドメインルールを想像してみてください。

名前で特定のチャットルームを尋ねる場合は、すでに存在する場合は部屋を返却するか、そうでない場合はその名前で新しいものを作成して返却してください。

このドメインロジックですか?その場合、Entityオブジェクトにどのように実装すればよいですか(リポジトリにアクセスする必要があるようです)

このコントローラは論理ですか?どの場合には、私はMVCコントローラにそれを貼り付けると思います。

このデータアクセスロジックはありますか?その場合、私はそれをRepositoryオブジェクトに組み込み、Contollerはそれを呼び出します。もう一度、簡単に十分です。

私はこれがドメインロジックだと思っていますが、エンティティに組み込む方法がわかりません。エンティティはリポジトリにアクセスしないように見えます(または何かが欠けていますか?)。

+1

私はあなたが間違いなく考えなかった「答え」を持っています。あなたのコードを作って、それを動かして、これを(合理的な意味で)動かしてください。 – Poni

答えて

3

あなたがそれを記述した方法から、これはアプリケーションサービス層で最もうまくいくと思います。 (WhoCanHelpMe?プロジェクトのTasksレイヤー)。私にとっては、これはドメインロジックではなくアプリケーションロジックです。その他のオプションについては

:エンティティがリポジトリにアクセスしないように

  • は、シャープが意図的に設計されています。
  • 一般に、コントローラは、可読性、テスト容易性などのために、ビジネスロジックを直接的には含まないことが一般的ではありません(個人的に私は個人的に私を嫌います。最初にロジックを入れてからリファクタリングするのが楽しいです。)

ロジックをリポジトリに直接配置する理由は明快です。あなたはIChatRoomRepositoryのメソッドがある場合:

ChatRoom GetRoomByName (string name); 
ChatRoom GetRoomById (int id); 

を通常指定されたidの余地がない場合GetRoomByIdはnullを返しますので、第1の方法は黙って作成することをあまりにも明白ではない部屋であれば(そしておそらく持続?)あなたはまだそれを持っていません。

より概念的に、DDD Quickly(P56)から:私たちは、工場でのリポジトリを混在させるべきではありません

。ファクトリは新しい オブジェクトを作成する必要がありますが、リポジトリはすでに作成されたオブジェクトを見つける必要があります。 新しいオブジェクトがリポジトリに追加されるとき、それは工場を使用して第1 を作成する必要があり、そしてそれはあなたが実装しようとしている場合ことを示唆しているリポジトリ

に与えられるべきですリポジトリパターンの場合、新しいチャットルームの作成はリポジトリの外部で行われるべきです。

+0

私はこれまで、ドメインオブジェクトにドメインログインを取得しようとするファンだったので、何らかの理由でアプリケーションサービスレイヤーを見落としてしまいました。しかしそれは理にかなっているので、私はアプリケーションサービスに行くつもりです。 – codeulike

関連する問題