层和组件之间有什么区别?

时间:2016-09-22 11:43:53

标签: java design-patterns architecture composition

我的主要开发框架是java spring框架。我必须编写服务层,控制器层,dao层,存储库层等。有数千吨的分层。我认为基于组件的开发方法比分层更有效。 Spring将每个java bean称为一个组件。但我认为组件和层之间应该存在重大差异。通常,层是被动的,其中组件是活动的。组件触发事件,调用生命周期回调方法并主动处理任务。另一方面,一个层只给出了抽象。那么层和组件之间的根本区别是什么?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

图层和组件化是两种设计方法,其次是建筑问题。

  1. 如果架构/设计强制要求获得可重用性, 可扩展性,模块化和可维护性的功能, 图层会帮助你。

  2. 如果您的应用程序不是太复杂而没有范围     自定义和可扩展性,您可以选择编码所有内容     在少数组件中。

  3. 最终,它是战略性建筑和设计需求,通常会让你与Layers& amp;组件。