在我的系统中,我有两个不同的项目,一个定义其接口,另一个定义其域对象.到目前为止,我设法使接口定义独立于域对象,但我现在感觉需要将某些域对象作为接口中定义的方法的参数或作为返回值.
我应该抵制并尝试保持接口独立于域对象,还是这是一个毫无根据的问题?
编辑 - 在发布问题之后,我考虑为每个域对象定义一个接口,这样他们可以保持分离 - 不知道它是否过度或者是否是要支付的价格,所以它们保持独立.
编辑#2 - 我被要求举一个例子,所以我会尽量保持简单.我有一个处理图像转换的过程,我的一个域对象是一个包含分辨率,页面列表,哈希等信息的类.让它称为DocumentInfo.我有一个使用DocumentInfo来执行GeneratePdfFromTiff等操作的类; 我首先将GeneratePdfFromTiff定义为IImageHandler的接口方法,然后由ImageHandler实现.
问题是 - GeneratePdfFromTiff的参数之一是DocumentInfo.这里我在接口级别定义的方法必须知道在域级别定义的DocumentInfo.这是我所关注的那种依赖.
这个很难,我会尝试一下。对于这个问题+1。
我认为,如果领域模型在现实世界中这样做,他们应该知道如何与彼此的内部运作进行交互。当然,这在很大程度上取决于您的确切领域模型,因为同一事物的不同模型会得出非常不同的表示。
每个领域模型类的接口的问题在于,领域模型本身已经是现实的特定视图,就像接口一样。接口仅在该特定域内有效。您不能将其用于ICar交通规划、家庭收入计算器和汽车空气动力学优化。
因此,我怀疑将它们的依赖关系隔离得太远是否非常有用。
据我所知,接口大部分(总是?)是公共的,这会引起访问问题。接口不应公开有关实现的详细信息,但域模型类包含实际的实现。因此,您必须为每个细节创建另一个抽象机制,而不是“仅访问某些值”。例如,您无法访问系统中的任何 ID、用户等。您需要一个抽象 ID 类型、一个 ID 提供程序等。我相信这在大型现实世界模型中可能非常麻烦。
当然,某些“自然域边界”仍然应该被隔离。如果您构建社交文本编辑器,则传统文本编辑器中也会出现的所有域类都应该与社交网络相关项目完全隔离。因此,文本编辑器应该只知道IUser. 但我想我不会告诉你任何新的东西......
这恐怕不太令人满意,但看起来本质上是一条细线。