java - 层和组件有什么区别?

标签 java design-patterns architecture composition

我的主要开发框架是java spring框架。我要写服务层、 Controller 层、dao层、存储库层等等。有数千吨分层。我认为基于组件的开发方法会比分层更有效率。 Spring 将每个 java bean 称为一个组件。但我认为组件和层之间应该有很大的区别。通常,层是无源的,而组件是有源的。组件触发事件、调用生命周期回调方法并主动处理任务。另一方面,层仅提供抽象。那么层和组件之间的根本区别是什么?

最佳答案

层和组件的概念不同,它们不能互相替代。层是一个抽象。您可以从数据库交互或 HTTP 端点处理程序中抽象出业务逻辑。层由组件组成。一个层中可以有多个组件。

让我们继续看具体的例子。您的系统中有 UserGroup 实体。您将为这两者提供必要的端点处理程序,名为 UserControllerGroupController。这些是组件,它们一起形成端点处理程序层。对于业务逻辑,您将拥有 UserServiceGroupService。这些是组件,它们形成服务层。带有 UserRepositoryGroupRepository 组件的数据库层也是如此。

如果您打算使用全栈组件,在这种情况下,所有层都会压缩到处理程序中。这意味着 UserController 实现了从获取请求、应用业务规则到访问数据库的所有内容。这种结构很难测试,也很难维护。过了一段时间,代码就会变得非常困惑并且难以处理。不会有单元测试,只会有集成测试来测试一切。无法更改数据库访问方法,有人可能希望使用内存存储库实现来进行测试,但这种技术不允许这样做。总而言之,分层架构一开始可能看起来很复杂,但从长远来看它会很方便。

P.S.:如果您对组件有其他意思,请发表评论,然后我们可以继续讨论。

关于java - 层和组件有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39638085/

相关文章:

.net - 相互依赖的子/父命名空间是代码异味吗?

java - 线程安全访问计数器

java - XStream实体缩写解析

java - 如何创建基于网页的程序?

java - 您链接同一对象的方法结果的设计模式的名称是什么?

node.js - nodejs 代表的是 Reactor 还是 Proactor 设计模式?

java - 我想在 Windows 上的 ColdFusion 中使用 WMI 或 Java 来获取性能数据

javascript - 哪个是最安全的内存泄漏方法

architecture - 任务队列在 Clean Architecture 中的什么位置?

sql-server - 数据老化技术