안녕하세요 도메인 구동 디자인 및 공장/공장 방법에 관한 몇 가지 질문이 있습니다. Domain Driven Design Blue Book (Eric EVan 's Book)에 따르면 복잡한 생성자를 팩토리/팩토리 메서드/빌더에 캡슐화해야하므로 모든 불변 식을 검사하는 일관성있는 위치가 있으므로 내 질문에 대해서는 다음과 같습니다.DDD 및 팩터 리
마술 효과 (예 : 블로그의 게시물 + 효과 지속 시간, 사용 된 재료 (문자열 목록), 마법 효과와 관련된 여러 가지 속성 등)에서 CRUD를 조작 할 수있는 마법 주최자 응용 프로그램을 개발하고 있다고 가정 해 보겠습니다. 불변량의 일부는 마법 효과가 항상 제목, 마법 효과의 내용, 지속 시간 및 선택 사항을 가져야하며 응용 프로그램에 등록 된 사용자에 의해 게시되어야한다는 것입니다.
그래서 많은 불변성을 가지고 있기 때문에 나는 MagicEffect 객체를 만들고 모든 불변량을 검사하는 EffectBuilder를 가지고 있습니다.
사용자 클래스에서 이와 같은 작업을 수행해도 괜찮습니까?
public class User {
// Several attributes and business methods
public EffectBuilder publishEffect() [
EffectBuilder builder = new EffectBuilder();
builder.withAuthor(this);
return builder;
}
};
그리고 다른 곳
User user = userRepository.findById(userId);
MagicEffect effect = user.publishEffect().withTitle(title).withContent(content).withDuration(duration).withElements(elements).build();
userRepository.save(user);
내가 매개 변수의 거대한 양의 거대한 방법이 첫 번째 예를 의미하지만 확인을 :
public class User {
// Several attributes and business methods
public MagicEffect publishEffect(final String title, final String content, final Long duration, final Collection<String> elements) [
EffectBuilder builder = new EffectBuilder();
builder.withAuthor(this);
builder.withTitle(title);
builder.withContent(content);
builder.withDuration(duration);
builder.withElements(elements);
return builder.build();
}
};
또는 내가 좋아하는 뭔가를해야 모든 불변 변수는 빌드 될 때 효과로 설정됩니다. 다른 시나리오에서는 프로그래밍 방식으로 유창한 인터페이스를 사용하여 코드 가독성을 향상 시키지만 불변량이 tim의 100 %를 충족시키지 않도록 할 수는 없습니다 이자형.
더 나은 접근 방법은 무엇입니까? 더 균형 잡힌 접근 방식이 있습니까?
감사 파블로
예 나는 그 사실도 잘 알고 있지만, 내가 실제로하고 있지 않은 일을하고 있다고 말하는 것처럼 두 번째 접근법으로 느낀다. 코드는 사용자가 효과를 게시하지만 클라이언트가 반환 된 EffectBuilder에서 빌드 메서드를 호출 할 때까지 효과가 생성되지 않는다는 것을 의미합니다. 그러나 긴 매개 변수 목록을 사용하지 않으려면이 방법을 사용하겠습니다. –
* publishEffect * responsibility가 User 객체에 속하지 않은 것일 수 있습니다. – Dmitry
실제로 publishEffect *에 매개 변수로 Builder (제목, 내용 등)를 전달하는 것이 더 나을 수도 있습니다. – Dmitry