저는 현재 프로젝트의 일부 코드를 리팩터링하고 있습니다. 결국 도메인 객체가 아닌 서비스 클래스에 많은 비즈니스 로직을 넣었습니다. 이 시점에서 대부분의 도메인 개체는 데이터 컨테이너입니다. 필자는 대부분의 비즈니스 로직을 서비스 객체에 작성하고 나중에 모든 것을 리팩터링하여 더 좋고, 재사용 가능하며, 더 읽기 쉬운 형태로 만들기로 결정했습니다. 그런 식으로 어떤 코드가 도메인 객체에 배치되어야하는지, 어떤 코드가 새로운 객체로 분리되어야하는지, 어떤 코드가 서비스 클래스에 남겨 져야 하는지를 결정할 수 있습니다. 이 도메인 객체에 좋은 재료를 만들 것처럼 만 입력 매개 변수는 도메인 개체 자체이기 때문에도메인 기반 디자인에서 다른 개체의 repostiories에 대한 호출을 도메인 개체에 넣는 것이 DDD 위반일까요?
public decimal CaculateBatchTotal(VendorApplicationBatch batch)
{
IList<VendorApplication> applications = AppRepo.GetByBatchId(batch.Id);
if (applications == null || applications.Count == 0)
throw new ArgumentException("There were no applications for this batch, that shouldn't be possible");
decimal total = 0m;
foreach (VendorApplication app in applications)
total += app.Amount;
return total;
}
이 코드는 것 같다 그래서 몇 가지 코드가 있습니다. 일부 리팩터링을위한 완벽한 후보자처럼 보입니다. 그러나 유일한 문제는이 객체가 다른 객체의 저장소를 호출한다는 것입니다. 그래서 나를 서비스 수업에 남겨두고 싶습니다.
내 질문에 따라서 다음과 같습니다
-
?
- 이 기능을 중단 하시겠습니까?
- 엄격한 도메인 기반 디자인을 따르는 사람이 어디에 두겠습니까?
- 왜? 시간에 대한
감사합니다.
편집 주 :이 한 상에 ORM을 사용할 수 없습니다, 그래서 나는 게으른 로딩 솔루션을 사용할 수 없습니다.
편집 주 2 : 나는 때문에-될 데이터 층 반사 (나의 생각)를 사용하여 도메인 개체를 인스턴스화하는 방법의 매개 변수에 걸릴 생성자를 변경할 수 없습니다.
편집 주 3 : 나는 단지 특정 배치에 총 응용 프로그램 수 있어야 것처럼 보인다 배치 객체가 응용 프로그램을 그냥 목록을 총 할 수 있어야한다고 생각하지 않는다. 그렇지 않으면 서비스 클래스에 함수를 남겨 두는 것이 나에게 더 합리적입니다.
파스칼 기반 로컬 변수. 왝. – yfeldblum
@ Justice, 나는 너의 고통을 느낀다 – mbillard