2

私は DDD の初心者で、概念に関するいくつかの記事を読んだことがあります。知識が不足している場合はご容赦ください。この例が集約ルートでどのようにモデル化されるべきかについて興味があります。

基本は次のとおりです。従業員、会議、およびコメントがあります。各従業員は、コメントを作成できる会議に参加できます。コメントは、従業員と会議に従って追跡されます。すべての会議と従業員には一意の識別子があります。

従業員に関係なく、会議のすべてのコメントを表示したい場合、最初にその会議に属するすべての従業員を取得してから、コメントを並べ替えて、会議 ID に一致するものだけを表示する必要がありますか?

従業員のリストが必要な場合、それを取得するために会議を通過する必要がないことは確かであるため、会議を集約ルートにすることはできません。それぞれが集約ルートかもしれませんが、コメントは実際には従業員の外では意味がありません。このシナリオへのより良いアプローチ方法についてのアイデアを探しています。

// Datebase tables
Meeting
Employee
Comment - Contain EmployeeId and MeetingId


public class Employee
{
    public List<Comment> Comments { get; set; }
}

public class Meeting
{
    public List<Employees> Employees { get; set; } 
}

助けてくれてありがとう。

4

2 に答える 2

1

従業員と会議は集約ルートであり、集約ルートのリポジトリを作成する必要があります。

コメントはMeetingの所有物にすることができます。会議に関係なく、従業員からコメントを取得することは役に立たないと思いますか?「コンテキスト」(==会議)がわからない場合、コメントには意味がないと思いますか?

そうすることで、クラスモデルはChrisMarisicが提案するものと非常によく似たものになります。

これらのクラスの隣に、次のリポジトリを作成できます。

public class EmployeeRepository
{
    public IList<Employee> GetAll() {}
}

public class MeetingRepository
{
    public IList<Meeting> GetAll(){}

    public IList<Meeting> GetMeetingsAttendedByEmployee( Employee emp ){}
}
于 2011-09-15T19:11:25.093 に答える
1

I would probably design this as

public class Comment
{
    public string Message {get;set;}
    public Employee {get;set;}
    public Meeting {get;set;}
}

public class Employee
{
    //public List<Comment> Comments { get; set; } <- why does this matter?
}

public class Meeting
{
    //public List<Employee> Employees { get; set; }  <- why does this matter?
    public List<Comment> Comments { get; set; } 
}
于 2011-09-15T18:59:57.427 に答える