2009-05-27 5 views
2

지속성 또는 기타 인프라 문제에 직면하지 않고 도메인 계층을 가능한 한 "순수"로 유지하려고합니다. 그러나 내 도메인 계층에서 RDBMS 또는 다른 외부 종속성 서비스를 사용해야하는 경우가 있으며이를 처리하는 방법을 잘 모릅니다.지속성 항목에 대한 도메인 계층 액세스

예를 들어, 내 응용 프로그램의 각 도메인 개체는 개체가 지속되지 못하게하는 깨진 규칙 목록을 얻기 위해 클라이언트가 호출하는 IValidatable 인터페이스를 구현합니다. 몇 가지 경우에 앞서 언급 한 유효성 검사 루틴은 DAO 클래스를 호출하여 특정 레코드의 존재 여부를 확인하는 작업을 포함합니다. 우리는 ORM을 사용하지 않습니다. 대신 데이터 액세스 객체 패턴을 사용하여 작성된 지속성 계층을 사용합니다. 이 데이터베이스 액세스를 중심으로 서비스/래퍼 클래스를 만들고 내 도메인 개체와 공동 작업을해야하나요? 이 간접 접근 수준을 수용 할 수 있습니까, 아니면 여전히 도메인 객체를 오염시키고 있습니까?

+0

특정 레코드가 도메인 개체와 어떤 관련이 있습니까? –

답변

2

일반적인 대답은 일종의 객체 관계형 인터페이스를 사용하는 것입니다. 도메인 계층은 도메인 모델의 인터페이스를 제공합니다. 커버 아래에는 관계형 데이터베이스가 있으며, 그 사이에 레이어가 있어야 object-relational mapping을 수행 할 수 있습니다. "우리는 ORM을 사용하지 않습니다"라고 말하면서 실제로 도메인 계층에서 직접 매핑을 수행하고있는 것입니다.

해당 매핑을 만드는 문제는 object-relational impedance mismatch 문제로 알려져 있습니다. 명시 적 ORM 계층을 식별하지 않으려면 DBMS 사용에 대한 세부 정보를 캡슐화하는 클래스를 작성해야합니다. (물론 ORMS 클래스를 도입하면 ORM 클래스가 도입됩니다.)

실제로, 일부 ORM 레이어를 피하는 것은 매우 어렵습니다.

1

영구 도메인 개체에서 지속성에 대한 지식을 숨길 수 없다는 견해가 오래있었습니다. 그렇게하려고하면 점점 부자연스러워지고 이상한 부작용이 생깁니다. 즉, 도메인 계층의 지속성에 대한 지식을 구축하는 것이 좋지만 반드시 정확한 지속성의 수단은 아니라고 생각합니다. DAO 인터페이스를 사용해야합니다.

유효성 검사에 따라 경쟁 조건이 적용된다는 것을 추가해야합니다. 이로 인해 발생할 수있는 제약 조건 예외를 처리 할 수 ​​있어야합니다.

관련 문제