领域驱动设计的一个似乎没有太多细节的部分是如何以及为什么应该将领域模型与界面隔离。我试图说服我的同事这是一个很好的做法,但我似乎没有取得太大进展......
他们在表示层和界面层中随心所欲地使用领域实体。当我向他们争辩说他们应该使用显示模型或 DTO 将领域层与界面层隔离时,他们反驳说他们没有看到这样做的商业值(value),因为现在你有一个 UI 对象需要维护以及原始域对象。
所以我正在寻找一些我可以用来支持它的具体原因。具体来说:
(如果答案是显而易见的,“解耦”,那么请解释为什么这在这种情况下很重要)
最佳答案
很简单,原因是实现和漂移之一。是的,您的表示层需要了解您的业务对象才能正确表示它们。是的,最初看起来这两种类型的对象的实现之间有很多重叠。问题是,随着时间的推移,双方都会增加一些东西。表示会发生变化,并且表示层的需求会演变为包括完全独立于您的业务层的事物(例如颜色)。同时,您的域对象会随着时间的推移而变化,如果您没有适本地与接口(interface)解耦,您就会冒着通过对业务对象进行看似良性的更改而搞砸接口(interface)层的风险。
就我个人而言,我认为处理事物的最佳方式是通过严格执行的接口(interface)范式;也就是说,您的业务对象层公开了一个接口(interface),这是唯一可以与之通信的方式;没有公开关于接口(interface)的实现细节(即域对象)。是的,这意味着您必须在两个位置实现域对象;您的界面层和您的 BO 层。但是这种重新实现虽然最初看起来像是额外的工作,但有助于加强解耦,这将在 future 的某个时候节省大量的工作。
关于design-patterns - 为什么我应该将域实体与表示层隔离?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/821276/