如果没有要执行的业务逻辑,则没有理由强制执行业务层。3 层架构不是一个神秘的协议,只是假设业务处理形成的最佳实践。
在当前的应用程序中,当不涉及业务流程时,我们经常直接从 JSF 控制器访问 DAO。这个想法是由一位 java 冠军提出的,他强调简单性是最重要的。
如果您担心将来可能需要添加业务逻辑的修改。我是这样考虑问题的:反正额外的业务逻辑会加到业务层,包括数据访问,所以这里没有区别。
CRUD 代码大多非常简单。因此,服务中的更改相当于将 DAO 中的单个调用或几个调用重新路由到 EJB - 一个简单的重构。CRUD 代码本身仍将保留,但将被推入 EJB - 另一个简单的重构。
这并不完美,但 IMO 比替代方案更好:有一个空的间接层。这增加了无用的复杂性。业务对象只会将调用转发给 DAO。
我认为 有两种 代码味道适用于这种情况:人为的复杂性和功能嫉妒。
我并不是说业务层中的 DA 在某种程度上是一种代码味道。我的意思是,拥有一个除了代理 DAO之外什么都不做的业务对象是一种气味。复杂性也是如此 - 添加的数据结构/架构层没有任何用途 - 您的应用程序中似乎已经存在 DAL。
您需要考虑的另一个方面是 - 开发人员看到直接使用 DAO 的服务有多令人惊讶?拥有 5 个服务,其中 2 个直接访问 DAO,不同于拥有 100 个服务,其中只有一个服务直接访问 DAO。
在第一种情况下,代码的简单性将超过增加的概念复杂性(单个事物有两个概念),在第二种情况下,我宁愿坚持业务层 - 这样做的惊喜(也称为 WTF 效应;)只是一次不同会太大。