我们有一个项目有几个战争文件相互引用。我最近意识到两者之间存在循环依赖关系,特别是工具和模型。其他服务使用这两种服务,而utils是为其他服务在模型上执行的操作而创建的。我很好奇这里最好的做法是什么。实用程序和模型听起来像是主要项目的伴侣,但我从来没有听说过战争文件被称为“工具和模型”......只是看起来很奇怪。
其他信息(不一定需要回答问题): 更具体地说,该模型使用utils用于它的类型适配器,这允许MyBatis将时间戳转换为joda时间。 utils使用我认为更容易接受的模型来对模型对象进行常规操作。
我是否应该将两者结合到模型大战中?我会有什么其他选择。如果我应该将它们结合起来,是否存在某种将实用程序和模型结合在一起的设计模式?什么是提供模型和实用程序类的服务的适当命名约定?
答案 0 :(得分:0)
关于如何删除maven cyclic dependencies等循环依赖关系的帖子很多
但是关于utils,一般的建议是,实用程序可以是两种类型,因为它们是通用的或项目特定的,即如果你正在编写通用实用程序,那么那些不应该依赖于你的任何模块(它们只是执行一般任务)所以应该总是在反应堆建造顺序中排在第一位。
其次,对于项目特定的实用程序,您始终可以执行' xxx.modals.utils'在你的场景中,这些可以很容易地消耗你的bean。
通用实用程序(独立于您的bean)应保存在不同模块中的另一个原因是它们也可以在其他项目中轻松重用。因此,你不必一次又一次地重新发明轮子!
答案 1 :(得分:0)
我相信您的问题的解决方案将基于观点和经验,而不是技术问题。我建议如下:
使用相同模块中的Utils 如果:您的模型类不可在其他模块中重复使用。换句话说,如果您的Util类仅与Model类在 relationship 中。如果你的util类只是为特定的模型类设计,那么将它拆分为模块是没有意义的。
使用不同模块中的Utils 如果:您的util类将是通用的。例如,您的Utils类旨在使用某些DataMapper(如 Dojo / Orika 等)将Model / Entity转换为Business Objects。这就是因为它们不会与Model类紧密耦合。将有实现将任何类型的模型转换为业务/价值对象,反之亦然。
这实际上是由微服务解决的,您可以专注于松散耦合可以独立存在的服务(如插件组件)。