1

DDD を使用して関連エンティティを更新する方法について混乱しています。Employee クラスと Workschedule クラスがあるとします。特定の従業員の特定の勤務スケジュールを更新するにはどうすればよいですか? Employee と Workschedule の関係は 1 対多です。以下は、特定の勤務スケジュールを追加/更新する方法を使用しているコードです。

public class Employee 
{    
    public int EmployeeId { get; set; }
    public virtual ICollection<WorkSchedule> WorkSchedules { get; set; }

    public WorkSchedule AddWorkSchedule(WorkSchedule workSchedule)
    {
        this.WorkSchedules.Add(workSchedule);

        return workSchedule;
    }

    public WorkSchedule EditWorkSchedule(WorkSchedule workSchedule)
    {
        var originalWorkSchedule = this.WorkSchedules.FirstOrDefault(w => w.WorkscheduleId ==  workSchedule.WorkscheduleId);

        originalWorkSchedule.ClockIn = workSchedule.ClockIn;
        originalWorkSchedule.ClockOut = workSchedule.ClockOut;

        return originalWorkSchedule;
    }
}
public class WorkSchedule
{
    public int WorkScheduleId { get; set; }
    public DateTime ClockIn { get; set; }
    public DateTime ClockOut { get; set; }

    public int EmployeeId { get; set; }
}

これは正しいです?DDD に正しく従ったか? また、今の私の考え Workschedule は値オブジェクトですが、正規化の目的で ID を入れています

4

3 に答える 3

0

あなたのモデルは「POCO」クラスでなければなりません

CRUD メソッドなど..追加または編集は、「サービス」または「リポジトリ」の一部と見なされます。

これが私の頭に浮かんだ簡単なアイデアです/どのように見えるべきか、そしてその使い方..

IRepository repository { get; set; } //implement Interface and inject via IoC Container

//..usage
var employee = repository.GetEmployee(123); //get by id
//..new WorkSchedule
employee.WorkSchedules.Add(workSchedule);

var result = repository.Save(employee);
于 2012-04-07T07:11:41.040 に答える
0

ここにあるものはすべて EF に関連しているため、DDD にはあまり関係ありません。コードが希望どおりに機能する場合は、問題ありません。しかし、DDD は EF やその他の ORM とは何の関係もありません。データベースや ORM をまったく気にせずに、ドメイン オブジェクトを設計する必要があります。次に、リポジトリで、ORM によって処理される永続エンティティにドメイン エンティティをマップします。

また、今の私の考え Workschedule は値オブジェクトですが、正規化の目的で ID を入れています

これは、レイヤーとモデルが混在している場合の結果です。ドメインに ID は必要ありませんが、永続化のために ID が必要です。両方の要件を 1 つのモデルに適合させようとして、そのモデル ドメインを呼び出すと、どこにも行きません。

于 2012-04-07T07:35:43.407 に答える