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