우리는 HR 관련 응용 프로그램 구축을 위해 노력하고 있다고 생각하십시오. 여기서 부서 및 직원에 대한 도메인 개체를 모델링해야합니다. 도메인 개체를 중첩 된 집계로 모델링해야하는지, 특히 중첩되어 있는지에 대해 궁금합니다.DDD에서 도메인 객체 모델링보다 나은 것은 어느 것입니까?
나는 두 개의 서로 다른 스타일을 다음과 같이 고려하기 위해 노력하고있어 :
솔루션 # 01, 중첩 된 골재와 모델 직원.
var emp = empRepository.Get(1);
// dot accessors
var numberOfPeople = emp.Supervisor.ManagedStaffs[0].ManagedStaffs.Count;
솔루션 # 2 중첩 집계가없는 모델 직원 :
public class Employee : BusinessObject, IEmployee
{
IList<IEmployee> ManagedStaffs { get; set;}
IEmployee Supervisor { get; set;}
}
그래서 우리는로 사용할 수 있습니다.
public class Employee : BusinessObject, IEmployee
{
//without nested aggregate
}
public class Supervisor : Employee, ISupervisor
{
IList<IEmployee> ManagedStaffs { get; set; }
}
그래서 우리는로 사용할 수 있습니다 : 우리는 ORM없이 도메인 객체를 지속성하려면
var emp1 = empRepository.Get(1);
// GetManagedStaffs needs a parameter which is a ISupervisor
var empList1 = empRepository.GetManagedStaffs(emp1.Supervisor);
var empList2 = empRepository.GetManagedStaffs(empList[0]);
var numberOfPeople = empList2.Count;
, 순수한 ADO.NET은 솔루션 # 2는 훨씬 더 보인다.
솔루션 # 1에서 도트 접근자를 사용하려면 투명 ORM 프레임 워크를 도입해야하며 재귀 적으로 중첩 된 집계로 인해 지연로드가 환영됩니다.
여기서 중요한 점은 중첩 된 집계를 처리하는 방법에 따라 어느 것이 더 나은 솔루션인지 판단하는 것입니다.
의견을 제출해 주시겠습니까? 또는 뭔가를 바로 잡아야합니까?
감사합니다.
LoD를 이해하는 것은 정말 도움이됩니다. 전에 핵심 개념을 놓친 상태에서 <% # foo.bar.bla.bla.SomePropertyOrCollection %>과 같은 그램 수준 설탕을 프로그래밍하는 데이터 바인딩을위한 편리한 방법입니다. –
다음은 LoD에 대한 유용한 기사입니다. http://haacked.com/archive/2009/07/14/law-of-demeter-dot-counting.aspx/ 또한 도메인 개체와 뷰 모델간에 차이점이 있습니다. 뷰 모델은 다른 객체와 상호 작용하지 않으므로 데이터 표현에만 사용됩니다.LoD는 객체가 서로 상호 작용할 때 중요합니다. – eternity