나는 대형 클래식 ASP 웹 응용 프로그램을 도메인 구동 디자인의 ASP.Net MVC로 변환하는 과정에 있습니다. 내 도메인의 대부분은 DDD에 적합하지만 순수한 DDD 방식이 적절하지 않은 상황에 처해 있습니다. 예를 들어, 내 응용 프로그램의 읽기 측면은 쓰기 측면과 크게 다릅니다. 문제는 없지만 별도의 읽기 모델을 만들었고 CQRS의 단순화 된 버전을 구현했습니다 (이벤트 소싱이없고 별도의 데이터베이스가 필요 없음). 또 다른 문제는 대량 데이터베이스 작업이었습니다. 문제 없습니다. 서비스로 구현됩니다. 여기 내 현재의 곤경이있다. Google 시스템을 통해 사용자는 향후 일정에 따라 시스템을 변경할 수 있습니다. 이를 위해 유효 날짜까지 보류중인 변경 사항을 저장하는 데이터베이스 테이블이 있습니다. 발효 일에 자동화 된 작업이 실행되어 실제 데이터베이스 업데이트를 수행합니다. 업데이트 작업에는 도메인 논리가 포함될 수 있으므로 DDD에 맞고 문제가되지 않습니다. 무슨 일이 일어나고 있는지 시각화하기 위해, 여기에 보류중인 업데이 트를 처리하는 클래스입니다 :이 다양한 데이터베이스 테이블에 대한 업데이트를 처리 할 수있는 일반적인 클래스입니다 볼 수 있듯이보류중인 업데이트 모듈 - 도메인 엔터티 또는 값 개체?
public class PendingChanges
{
public int EntityID {get; set;}
public string FromTable {get; set;}
public string DetailField {get; set;}
public string NewValue {get; set;}
public DateTime EffectiveDate {get; set;}
public DateTime EnteredDate {get; set;}
public int UserID {get; set;}
public string UserName {get; set;}
public string UserArea { get; set; }
// Business logic and validation here?
}
. 기본적으로 업데이트되는 데이터베이스 열, 열이 될 새 값, 해당 열이 속한 테이블, 유효 날짜 및 일부 로깅 데이터를 저장합니다.
내 질문은 다음과 같습니다. 보류중인 업데이트를 수집하고이를 보류중인 업데이트 테이블에 저장하는 논리를 도메인 개체로 모델링해야합니까? 예를 들어 서비스와 같이 다른 방식으로 처리해야합니까?
다른 방식으로 말하면 PendingChanges 자체는 자체 도메인 논리가있는 도메인 엔터티입니까? PendingChanges에는 변경 사항이 적용되는 엔터티와는 다른 비즈니스 규칙이 있습니다. 예를 들어 UserArea를 구성하는 요소는 유효성 검사는 물론 FromTable의 합법적 인 값인 비즈니스 규칙으로 간주 될 수 있습니다.
다른 도메인 개체간에 재사용 할 수 있으므로 값 개체를 PendingChanges합니까? 그렇다면 PendingUpdatesService를 사용하는 것이 더 합리적입니까?
매우 기술적으로 들리 겠지만, 지금은 간단한 솔루션 (절차 적 트랜잭션 스크립트)으로 가서 거기에서 가져 가야합니까? –
PendingChanges 클래스는 응용 프로그램의 여러 부분에서 다양한 시나리오에서 사용되므로 재사용 가능성 관점에서 볼 때 순수한 절차 적 접근 방식은 최적이 아닙니다. 하이브리드 방식이 가장 적합 할 수 있습니다. –