0

这个问题(如标题中所述)出现在我面前,因为最近我正在研究带有注释支持的 Spring MVC 3.1,并且还在为即将到来的项目考虑 DDD。在新的 Spring 中,任何带有业务方法的 POJO 都可以被注释为控制器,我在 Controller 类中解决的所有问题都可以通过注释来表达。

所以,从技术上讲,我可以采用任何类并将其连接为控制器,java 代码不受任何控制器特定代码的影响,因此 java 代码可以处理诸如检查安全性、启动 txn 等事情。所以这样的类属于表示层或应用层??

更进一步,我们可以提取安全性、txn mgmt 之类的内容并通过注释来表达它们,因此 java 代码现在是域对象的代码。这是否意味着我们已经将 2 层融合在一起了?请说清楚

4

2 回答 2

0

您不能将任何 POJO 用作控制器。控制器的工作是从浏览器获取输入,调用服务,为视图准备模型,并返回视图以进行调度。它仍然是一个控制器。不是通过 XML 和方法覆盖来配置它,而是通过注释来配置它,仅此而已。

该代码与任何控制器特定代码相去甚远。它仍然使用 ModelAndView、BindingResult 等。

于 2012-06-07T09:38:37.563 回答
0

关于 AOP,我将接近问题的标题:

AOP 不违反“分层架构”,特别是因为根据定义,它添加了应用程序范围的功能,而不管功能在哪个层中使用。规范的 AOP 示例是日志记录:不是一个层,而是一个功能——所有层都这样做记录。

要将 AOP 与您的问题联系起来,请考虑事务管理,这可以通过 Spring 的 AOP 机制处理。“事务”本身并不特定于任何层,尽管任何给定的应用程序可能只需要单层中的事务。在这种情况下,AOP 不会违反分层架构,因为它只应用于单个层。

在事务可能跨层 IMO 的应用程序中,它仍然不违反任何分层原则,因为事务所的位置并不真正相关:重要的是“这块功能必须是事务性的”。即使该事务跨越多个应用程序边界。

实际上,我会说在这种情况下使用 AOP 会特别保留层,因为 TX 代码不会在所有这些层中机械地复制,并且没有单个层需要怀疑 (a) 它是否在事务上下文中被调用, 或 (b)它位于哪个事务上下文中。

于 2012-06-07T10:43:12.420 回答