2012-04-14 11 views
2

EFコードファーストを使いたいです。私はリポジトリパターンを使って作業しています。そして、私はn層アーキテクチャを実装したいと思います。私が本当に望むのは、TDDを使用することですが、私は集約ルートに問題があります。私の問題はこれです...コードファースト、リポジトリパターン、およびn-Tierの使用に関するいくつかの質問はありますか?

私はブログオブジェクトを持っています。このブログオブジェクトの関連ファイルから追加することができます。すばらしいです。だから、私は本質的に私のリポジトリを作成する1集計ルートを持っているし、私は、ブログに関連ファイルを '追加'できるようにいくつかのメソッドを追加する必要があります。しかし、私はこれをどこに置くのですか?そのデータアクセス層の事で、私は本当にそこに欲しいです。しかし正直なところ、ビジネスロジックの課題でもあります。製品の一部は、assocファイルを追加することができます。私はAssocファイルをDALまたはBLLに追加するロジックを置くべきですか?

誰かが私にいくつかのガイドラインを教えてくれることを願っています。

+2

この質問は流行語ビンゴのように聞こえます:) – ThiefMaster

答えて

0

TDDではなくDDDを意味すると思いますが、TDDの文脈ではほとんど意味がありません。

システムにファイルが何を意味するのか考えておく必要があります。ファイルと投稿を接続するルールはありますか?たとえば、ファイルを持つべき投稿を削除したとしますか?私たちもそれを削除しますか?同じファイルを複数の投稿に「追加」することはできますか?あなたは座って、考えて、あなたについての知識を集めます。それで、あなたがドメインに紹介されるべき場所があるかどうかを決めます。

私は想像することができますいくつかのサンプルドメイン:

public class Post 
{ 
    private List<File> _files; 
    public IEnumerable<File> AssociatedFiles {get {return _files;}} 
    public void AssociateFile(File file){//...} 
    public void DisassociateFile(File file){//...} 

    //It doesn't delete it just do some logic. Maybe we can't delete this post and need to throw exception or whatever logic you need 
    public void Delete() 
    { 
     foreach (File file in AssociatedFiles) DisassociateFile(file); 
    } 
} 

public class File 
{ 
    public String Url; 
    public DateTime Created; 
    public DateTime Modified; 
} 

public class PostRepository 
{ 
    public void Delete(Post post) 
    { 
     post.Delete(); 
     DbContext<Post>.Delete(post); //I Don't remember EF syntax for this 
     DbContext.SaveChanges(); 
    } 
} 

を更新:続けていきましょう...私は私の最初の設計は、(重要な概念を逃すことdescoveredあなたのドメイン上の思考の5分後

DDDの場合は常にビットごとに知識をスクラップします)。

ファイルをアップロードするのは誰ですか?ユーザーはすでに投稿したファイルを投稿に関連付けることができますか?投稿するには新しいファイル(分割されていない)ファイルを追加できますか?彼はこれを混ぜることができますか?それらは重要な質問です、再びあなたはそれについて考え、あなたのシステムを設計する必要があります。

+0

さて、私は今これを行う方法を見ています。私はちょうどBlogリポジトリ経由でAssocFilesを追加して削除します。これは本質的に集合ルートです – Exitos

1

あなたはリポジトリと集約ルーツについて話していますので、あなたはDDDをしたいと言っていると思います。 DDDには、システムのユーザーと一緒に開発するモデルでなければならないドメインモデルが必要です。いずれにしても、通常のユーザーが理解しなければならない概念で構成する必要があります。 したがって、ユーザーがブログを関連ファイルを持つものと考える場合、これらのファイルをブログに追加することができます。関連付けられたファイルはドメインモデルに属し、ブログオブジェクトにはaddメソッドが必要です。 私の推測では、BLLはそれらの関連ファイルを置く場所です。

1

まず、バインドされたコンテキストがわかるまで、集約ルートを特定することはできません。明確なBSがなければ、ARは存在しない。 ANyオブジェクトは、コンテキストに応じてARにすることができます。私はあなたのドメインを知らないので、Blogがファイルを追加するのに必要な情報を有効と見なします。追加機能はARにあります。

リポジトリは、永続性に関連するすべてを処理します。つまり、dbに保存されます。この場合は、単一のメソッドを含める必要があります。

public interface IBlogFilesRepository 
{ 
    void Save(Blog); 
} 

ドメイン/ビジネスロジックを常にドメイン/ BLレイヤーに配置します。 DALはデータベースへのセーブ/ロードのみを処理しますが、ドメインの動作を処理する上でビジネス(SIC)はありません。

関連する問題