【发布时间】:2013-04-27 04:47:53
【问题描述】:
我有一个上下文对象。它是一个复杂的小字符,由 Auth 对象、CurrentNode 对象、Graph 对象和其他一些对象组成。 Context 对象有很多简单的方法,例如isLoggedIn() 和isAdmin(),还有很多更复杂的方法,例如hasPathToNode() 和netPathsToNode()。大多数情况下,这些方法只是代理附加对象。
上下文对象在我的域层中,即。我的应用程序堆栈的底部。它被所有层超类型使用,包括控制器、视图和服务。这似乎工作得很好。
到目前为止,我还不需要使其他域对象依赖于上下文。我的控制器或服务已经能够决定是否应该执行请求的操作。但是,现在我有一个域对象,它特别复杂并且严重依赖于 Context 中封装的逻辑。
我可以继续让这个域对象依赖它的上下文,但我的问题是我应该吗?对象和上下文在同一层,哪个很好。 Context 是一个单例,但可以重置,因此很容易测试。
根据 Martin Fowler 关于服务层模式的 POEAA 讨论,“域逻辑”(与“应用程序逻辑”/“工作流逻辑”相反)的逻辑属于域对象,因此鼓励我继续前进让依赖发生。
我意识到“耦合”通常是需要避免的。然而,在这种情况下,我将用层内耦合代替层间耦合,我认为这本身就是一种改进。最终我会让依赖项可注入,这将进一步减少耦合的缺点。
到目前为止,这与我的方法有相当大的不同,所以我想在我做出改变之前找出你的想法。如果我继续处理这种依赖关系,我可能会重构我迄今为止所做的所有工作,并让其他域对象也依赖于它们的 Context。
【问题讨论】:
-
如果有代码,问题更容易理解。
标签: design-patterns dependencies