은 이러한 논쟁에서에 계속 :도메인 Enties 액세스 저장소는
DDD - the rule that Entities can't access Repositories directly
Is it ok for entities to access repositories?
는 도메인 저장소에 액세스 할 수 더 나은 느낌이 어떤 상황이 여전히있다.
public class TaskStatus
{
public long Id {get;set;}
public string Description {get;set;}
}
public class Task
{
public long Id {get;set;}
public string Description {get;set;}
public TaskStatus Status {get;set;}
public void CompleteTask()
{
ITaskStatusReposity repository = ObjectFactory.GetInstace<ITaskStatusReposity>(); //Or whatever DI you do.
Status = repository.LoadById(Constants.CompletedTaskStatusId);
}
}
내가 CompletedTaskStatus 및 OpenTaskStatus 객체를 가질 수 알고 있지만이 unnessacery 것와 이어질 수있는 상황이있다 : 내가보고 목적에 대한 설명을 포함하는 데이터베이스의 TaskStatus 테이블을 필요로 가정하는,이 예제를 가지고 계급 폭발에.
그리고 어쨌든 왜 이런 종류의 일이 아니라면 왜 저장소 인터페이스가 도메인에 저장되어 있습니까?
1 + 2 : ITaskStatusRepository에 액세스하여이 도메인은 지속성의 본질을 인식하지, althought 나는 지속의 존재를 인식하고 동의합니다. 확실히 저장소가 조롱받을 수 있기 때문에 단위 테스트가 가능합니까? 나는 당신이 내가 무엇을하려고 노력하고 있는지를 당신이 어떻게 얻을 것이라고 제안하고 있는지 확실하지 않습니다. –
3 : 데이터베이스에 액세스하는 것 외에 내 리포지토리가 무엇을하고 있는지 잘 모르겠습니다. 4 : 좋아, 그래서 TaskStatus는 열거 형일 수 있고 'public void Complete() {Status = TaskStatus.Complete; } '이고 StatusDescription은 Task의 속성이어야합니까? –
내가 잘못 이해하지 않는 한, 'CompleteTask'는 저장소에있는 것입니다. 내 exampl은 매우 사소한 것이며, 유일한 비즈니스 논리는 작업이 완료되면 상태가 '완료 됨'으로 변경된다는 것입니다. 이 논리는 훨씬 더 복잡 할 수 있으며 저장소에서 확실히 수행되지 않아야합니다. –