3

デザインに関連する質問がいくつかあります。

  • service layer interfacesに常駐する必要がありdomain layerますか?たとえばuser service
  • コード部分を別のレイヤーに移動する主な理由は何ですか?
  • service layerに常駐する必要がありsame assembly as the application layerますか?

ありがとう!

編集

私はを使用し、RavenDB非常に細いコントローラーアクションがありますが、アクションとして2つのアクションがあります[NonAction]

[NonAction]
public IEnumerable<Article> GetAllArticles() { 
    return this.session.Query<Article>()
        .Customize((x => x.WaitForNonStaleResults()))
        .AsQueryable()
        .OrderBy(d => d.CreatedOn);
}

[NonAction]
public IEnumerable<String> GetAllCategories() {
    return this.session.Query<Article>()
        .Select(x => x.Category)
        .Distinct().ToList()
        .OrderBy(x => x);
}

..リポジトリパターンを使用しないため。それをサービス内に置くことは合理的ですか?

4

3 に答える 3

3

サービスレイヤーインターフェイスはドメインレイヤーに存在する必要がありますか?たとえば、ユーザーサービス?

DDDでは、ドメインサービスとアプリケーションサービス(インフラストラクチャサービスは言うまでもありません)の2種類のサービスを区別する必要があります。

  • ドメインサービスはドメインレイヤーにあり、どのエンティティにも属していない、または複数のエンティティにまたがるドメインロジックが含まれています。

  • アプリケーションサービスはアプリケーション層にあり、ドメイン層への呼び出しを調整し、場合によっては結果を返すアプリケーション固有の操作を定義します。それらは、ユースケースまたはユースケースのサブパートに対応する場合があります。アプリケーションサービスはクライアントから直接呼び出されますが、ドメインサービスは呼び出されません。

アプリケーションサービスインターフェイスは、ドメイン固有ではなくアプリケーション固有であり、ドメインがそれらを使用しないため、ドメインレイヤーにある必要はありません。アプリケーション層はドメイン層を参照しますが、その逆はありません。

コード部分を別のレイヤーに移動する主な理由は何ですか?

頭に浮かぶ最初の利点は、再利用性(アプリケーション固有のものをすべて持ち歩くことなくドメインを他の場所で再利用する)と保守性(一緒に変化するものをグループ化する)です。

関心の分離単一責任の原則結束を参照してください。

サービス層はアプリケーション層と同じアセンブリに存在する必要がありますか?

DDDには、サービスレイヤーはありません。ただし、アプリケーション層は、他のアプローチでサービス層と呼ばれるものと同等であることがよくあります。

リポジトリパターンを使用していないので。それをサービス内に置くことは合理的ですか?

「本による」DDDは、この種の操作のためにリポジトリを必要とします。DDDにそれほど厳密に従わなくても、データアクセスオブジェクト、データゲートウェイなど、より正確な名前がたくさんある場合は、すべてを「サービス」と名付けるのは大ファンではありません。ここで、これらのメソッドを含むオブジェクトは、1つの永続データストア(Raven DB)を明示的に処理するため、低レベルのデータ固有のレイヤー(DAL、インフラストラクチャレイヤー)に配置する必要があることに注意してください。

于 2012-08-09T16:04:04.240 に答える
1

コード部分を別のレイヤーに移動する主な理由は何ですか?

これは簡単です。コードが見えない場所にコードを移動する主な理由は、複雑さの管理です。あるインターフェースの背後にコードを隠すときは、そのインターフェースについてのみ考える必要があり、その実装について考える必要はありません。

同じ理由がレイヤーにある場合、もう1つのポイントがあります。レイヤーは通信に対する制約を提供します。管理する必要のあるパブリックサーフェスがあり、実装するすべての内部コードパスがあり、次のレイヤーにのみアクセスできます(定義されたインターフェイスのセットを介して)。これは、より明確なコードを書くのに役立ちます。

于 2012-08-09T07:01:40.770 に答える
1

.netクライアントを使用している場合は、それがリポジトリパターンです。DocumentStoreとDocumentSession、またはそれらのインターフェースIDocumentStoreとIDocumentSession

于 2012-08-09T23:05:17.523 に答える