저는 Eric Evans가 "도메인 중심 디자인 : 소프트웨어의 핵심 부분을 다루는 것"을 끝 마치고 C#으로 도메인 중심의 첫 번째 응용 프로그램을 작성하려고합니다.TDD 및 DDD 시작하기
응용 프로그램은 헬프 데스크에서 사용자에게 컴퓨터 할당을 추적하는 데 사용됩니다.
도메인의 일부를 반영하기 위해 간단한 클래스 다이어그램을 그렸습니다. 나는 또한 나의 첫번째 기능 (사용자에게 컴퓨터를 할당하는) 식별 한과에 대한 테스트를 작성했습니다
이 ... ... 다음과 같습니다
[Test]
public void AllocateToUser()
{
var user = new Owner("user1");
var computer = new Computer("computer1");
computer.Allocate(user);
Assert.AreEqual(user.Username, computer.AllocatedTo.Username);
}
마지막으로 테스트 통과를위한 코드를 작성했습니다.
public class Computer
{
public Computer(string name)
{
Name = name;
}
public string Name
{ get; private set; }
public Owner AllocatedTo
{ get; private set; }
public void Allocate(Owner owner)
{
AllocatedTo = owner;
}
}
public class Owner
{
public Owner(string username)
{
Username = username;
}
public string Username
{ get; private set; }
}
지금까지 너무 좋았습니다.
그러나 분명히이 중 어느 것도 지속성을 언급하지 않습니다. 나는 컴퓨터를위한 저장소 클래스를 소개 할 필요가 있다고 생각한다. 아마도 다음과 같은 것일 수 있습니다.
나는 이제 막혔습니다. 컴퓨터에 할당 된 사용자에 대한 변경 사항을 저장소로 전달하는 방법은 무엇입니까?
나는 다음과 같은 옵션을 갖고있는 것 같다 :
- 는 ComputerRepositry의 인스턴스를 instanstiate 및 저장 (Store) 메소드를 호출하기 위해 컴퓨터 클래스의 할당 방법의 구현을 수정합니다.
인터페이스 만들기 IComputerRepository; IComputerRepository를 구현하는 클래스 인스턴스가 제공되도록 Computer 생성자를 수정합니다. Allocate 메서드 내에서이 주입 된 인스턴스에 대해 Store를 호출합니다.
할당 및 저장에 대한 호출을 마무리하는 서비스 (AllocationService)를 만듭니다. 호출 코드에 대한 두 단계를 강제로 클라이언트에
패스 resposibility :
- 호출이 ComputerRepository의 인스턴스를 인스턴스화 컴퓨터 클래스
- 의 인스턴스에 할당 및 저장을 호출합니다. 이들의
어느 것도 만족스러운 보이지 않는다 : 나는 컴퓨터 클래스에서 직접 저장소를 인스턴스화 할 것 같은
을 테스트하기 어렵다.
은 의존성 주입을 사용하여이 문제를 방지합니다. 그러나 내가 컴퓨터를 인스턴스화 할 때마다 IComputerRepository의 일부 인스턴스를 전달해야하므로 여전히 추한 것입니다.
은 절차가 너무 복잡하여 도메인 엔터티 클래스 내에 동작을 캡슐화하지 못했습니다.
그냥보기 흉하게 보입니다.
어떻게해야합니까?