嗨我有几个关于域驱动设计和使用工厂/工厂方法的问题。 %的领域驱动设计蓝皮书(埃里克·埃文斯书)就指出,复杂的构造函数应该内工厂/工厂方法/建设者封装所以,你检查所有的不变量一致的地方,所以我的问题是关于这个:DDD和工厂
比方说,我开发一个神奇的组织程序,您可以进行CRUD像魔法效果的操作(比如在博客+几个属性般的效果持续时间,使用的材料后的字符串(列表)与魔法效果有关,行话)一些不变式是魔法效果必须始终有一个标题,魔术效果的内容,持续时间和可选的模式,并且必须由在应用程序中注册的用户发布。
所以,因为我有好几个不变量我有一个建立MagicEffect对象和检查所有的不变量一EffectBuilder。
是否确定这样做的用户类?
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();
}
};
或者我应该这样做:
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);
我的意思是第一个例子,我有参数巨量一个巨大的方法,但我要确保所有的不变式都是在构建时的效果中设置的,在另一种场景中,我通过流畅的界面以编程方式提高了代码的可读性,但我无法确保不变量满足100%即
哪个是更好的方法?是否有更平衡的做法?
感谢 巴勃罗
是的,我因子评分的,太多,但我觉得用第二种方法就像我,告诉我做什么我其实没有做。 我的意思是代码表示用户发布了一个效果,但是直到客户端在返回的EffectBuilder上调用构建方法时才会创建效果。 但我会采用这种方法避免长参数列表。 –
也许* publishEffect *责任不属于一个用户对象。 – Dmitry
事实上,将Builder(标题,内容等)作为参数传递给* publishEffect *可能会更好。 – Dmitry