2017-03-18 1 views
0

내비게이션 등록 정보가있는 사양 패턴을 사용하는 것이 맞습니까? 나는 학생을 추가 할 때탐색 특성이있는 사양 패턴

, 내가 주소를 확인해야합니다

나는 추적 컨텍스트를 가지고있다.

학생 클래스 :

public class Student { 
    public string Name { get; set; } 
    public DateTime Birth { get; set; } 
    //... 
    public virtual ICollection<StudentAddress> StudentAdresses { get; set; } 
} 

StudentAddress 클래스 :

내 학생 서비스 (DDD)에
public class StudentAdress{ 
    public int Id { get; set;} 
    public string Street { get; set; } 
    //... 
} 

:

서비스 :

public void AddStudent(Student student) 
{ 
    // code 
    var studentValidation = new StudentValidation().Validate(student); // Student Validation has a set of specifications that will populate a validation result object and that I'll retrieve it by Domain Controller Notification (MVC) 
    // code 
} 

PS : 학생 검증은 검증 결과 개체를 채 웁니다 내가 도메인 컨트롤러 알림 (MVC) 위로 질문에

하여 검색 할거야 사양의 집합을 가지고 있습니다 ...

어디에서 Student Addresses 클래스 사양을 넣을 수 있습니까?

나는 StudentValidation 클래스 안에 넣을 수있는 가능성을 생각하고 각 주소의 유효성을 검사 할 수있는 탐색 속성을 사용합니다. 그것이 맞는지 나는 모른다. 이것은 횡단 검증의 일종입니다.

+0

왜 StudentAddress가 엔티티입니까? 값 객체 여야합니다. –

+0

이 질문에 대한 내 대답은 UI 유효성 검사와 도메인 유효성 검사에 관한 올바른 방향으로 인도 할 것이라고 생각합니다. http://stackoverflow.com/questions/28395176/should-i-abstract-the-validation-framework-from-domain- layer/28397201 # 28397201 – plalx

+0

Constantin, StudentAddress는 내 DB의 테이블입니다. 그것은 신원을 가지고 있으며 Value Objects는 특정 Entity의 속성 집합이라고 생각합니다. –

답변

0

DDD에서 유효성 검사는 불변성을 보장하는 형식입니다. 이는 집계에서 집계 루트의 책임입니다. 예를 들어, Student는 StudentAddress를 자식으로하는 Student Aggregate의 루트입니다. 이 경우 학생은 집합체가 유효한 상태인지 확인해야합니다. 이상적으로,이 논리는 문자 그대로 Student 클래스 자체 내에 있어야하지만, 귀하의 경우에는 StudentService를 사용하여 Student의 유효성 검사를 수행하는 것으로 보입니다. 따라서, 귀하의 경우, 본질적으로 집계 루트의 책임을지고 있기 때문에 StudentService에서 주소 유효성 검사를 수행하는 것이 좋습니다 (IMO).

StudentAddress에 대해 Student보다 별도의 유효성 검사기 유형이 필요한지 여부는 문제의 유효성 검사 규칙의 컨텍스트/범위에 따라 다릅니다. 예를 들어 주소에 도시가 포함되어 있는지 확인해야하는 경우 StudentAddress 수준에서 쉽게 완료 할 수 있습니다. 그러나 학생이 적어도 하나의 주소를 가지고 있는지 또는 학생이 두 개의 주소가 중복되어 있지 않은지 확인해야하는 경우 학생 수준에서해야합니다.

일반적으로 DDD에 대한 자세한 내용은 here입니다.