j2ee多层软件体系结构

介绍

什么是基础架构 ? 如果我们在建筑物上考虑, 基础设施就是带来光与水的要素。 您可以建造一栋很棒的房子,但是如果您不将其连接到城市基础设施,您将永远无法住在其中。 最后,该建筑物能够接收水和光,但未与任何特定的水或光分配器链接。 我可以与能源公司A签订合同,并在需要时更改为能源公司B。

如果我们回到软件工程,则软件基础架构就是为我们的系统提供能量的数据库技术,网络协议或文件系统实现 。 它是软件体系结构的一部分,但是对于构建而言,应该采用与供应商无关的原则 ,这意味着将软件体系结构与任何特定的基础结构实现分离开,以便能够轻松地从一种技术切换到另一种技术。

持久层

基础结构层最重要的部分之一是持久层 。 持久性是指能够独立于软件生存的任何对象。 通常, 数据库是某些数据集的持久性表示。 如域层中所述,域对象通常需要保留。 但是持久性并不直接属于业务文档! 您从来没有与业务专家谈论数据库表,而是谈论对象。 因此,将两个问题分开是非常重要的:

  1. 业务对象的定义是域层的一部分
  2. 业务对象到持久性模型的映射是持久性层(基础结构层)的一部分

可能的实现

以我的经验,我学习了一种实现持久层的方法 。 作为基本思想,仅通过接口公开业务对象 。 这些业务对象的纯实现不会公开,只能通过工厂使用,也可以通过接口公开,并通过Lookup或ServiceLoader收集。 最后,要使用ORM将持久层定义为Hibernate或EclipseLink , XML映射是首选。

我知道你们中的大多数人都会抱怨使用XML而不是Annotations ,但是对于已被前缀用来将业务对象与其持久性基础结构技术区分开的范围而言,注释的介入性太大。 批注将持久性元数据放入域对象中,但是如果那些对象需要由另一个应用程序以完全不同的方式进行持久化,又该如何使用呢? 将这两个问题分开的原则促进了域层的可重用性。

多种基础设施

Hibernate可能只是我们要提供给业务对象的可能的持久表示形式之一。 如果我们还希望能够将它们编组为XML怎么办? 因此,我们可以考虑实现几个基础结构实现,并在运行时动态选择或在集成时静态选择所有这些实现。 范围是, 无论我们使用哪种实施方式,系统都必须以确切的方式继续工作 。 它只是接收数据源,如果该源是XML存储库,数据库或文件系统,则从应用程序的角度来看,什么都没有改变。

因此,多层架构的一种完美实现是对基础架构的更改不会对其他层产生任何影响的实现。

多层架构的特点 多层结构体系有哪些_java

结论

基础架构层为系统提供能量,这意味着没有该系统,您将无法运行软件。 因此,即使将其设计为最后一个阶段,也可以很快实现。 当域层将被完全实现时,也有可能实现一些虚假的基础设施技术并推迟最终实现; 这样可以避免每次需要更改业务对象时就不断更改基础结构实现的风险。

参考: 多层体系结构(4)–来自我们的JCG合作伙伴 Marco Di Stefano在“ 重构思想”博客中的基础结构层 。

翻译自: https://www.javacodegeeks.com/2013/06/multilayered-architecture-4-the-infrastructure-layer.html

j2ee多层软件体系结构