网站地图生成软件,承包网站建设的公司,长沙市网站推广电话,西安网站建设 appspring体系结构每个开发人员必须了解两件事#xff1a; 架构设计是必要的。 花哨的体系结构图没有描述应用程序的真实体系结构。 真正的体系结构是从开发人员编写的代码中找到的#xff0c;如果不设计应用程序的体系结构#xff0c;最终将得到一个具有多个体系结构的应用… spring体系结构 每个开发人员必须了解两件事 架构设计是必要的。 花哨的体系结构图没有描述应用程序的真实体系结构。 真正的体系结构是从开发人员编写的代码中找到的如果不设计应用程序的体系结构最终将得到一个具有多个体系结构的应用程序。 这是否意味着开发人员应由建筑师统治 不行 架构设计非常重要不能只留给建筑师 这就是为什么每个想要不仅仅是一个类型编写者的开发人员都必须擅长 于此 。 让我们从两个原则入手这两个原则将帮助我们为基于Spring的Web应用程序设计更好更简单的体系结构。 优秀建筑的两大Struts 建筑设计可能感觉像是一项艰巨的任务。 这样做的原因是许多开发人员被教导要相信架构设计必须由神秘知识的守护者来完成。 这些人称为软件架构师。 但是 任务本身并没有听起来那么复杂 软件体系结构是软件系统的高层结构创建这种高层结构的准则以及该结构的文档。 尽管经验确实可以帮助我们创建更好的架构但是架构设计的基本工具实际上非常简单。 我们要做的就是遵循以下两个原则 1.关注点分离SoC原则 关注点分离SoC原则指定如下 关注点分离SoC是一种用于将计算机程序分为不同部分的设计原理这样每个部分都可以解决一个单独的关注点。 这意味着我们应该 确定我们需要注意的“问题”。 决定我们要在哪里处理它们。 换句话说该原理将帮助我们确定所需的层以及每个层的职责。 2.保持简单愚蠢KISS原则 保持简单愚蠢KISS原则指出 如果将大多数系统保持简单而不是使其变得复杂则它们的工作效果最佳。 因此简单性应该是设计的主要目标并且应避免不必要的复杂性。 这个原则是理性的声音。 它提醒我们每个层都有价格如果我们创建一个复杂的体系结构而具有太多的层则价格会太高。 换句话说 我们不应该设计这样的架构 来源 Geek and Poke足迹 – 根据CC 3.0许可 我认为约翰朱迪马克和戴维犯有手淫罪 。 他们遵循关注点分离原则但忘记了最小化其体系结构的复杂性。 可悲的是这是一个常见的错误并且价格很高 添加新功能要花的时间比应该花的时间长得多因为我们必须通过每一层传输信息。 维护应用程序是一件不可能的事因为没有人真正了解架构并且每次做出的临时决定都会堆积起来直到我们的代码库看起来像是一大堆东西有十层。 这就提出了一个明显的问题 什么样的架构可以很好地为我们服务 每个人都应该做到三层 如果考虑Web应用程序的职责我们会注意到Web应用程序具有以下“问题” 它需要处理用户的输入并将正确的响应返回给用户。 它需要一个异常处理机制来向用户提供合理的错误消息。 它需要一种交易管理策略。 它需要同时处理身份验证和授权。 它需要实现应用程序的业务逻辑。 它需要与使用的数据存储和其他外部资源进行通信。 我们可以通过仅使用“三层”来解决所有这些问题。 这些层是 Web层是Web应用程序的最上层。 它负责处理用户的输入并将正确的响应返回给用户。 Web层还必须处理其他层引发的异常。 因为Web层是我们应用程序的入口点所以它必须注意身份验证并充当防范未授权用户的第一道防线。 服务层位于Web层下方。 它充当事务边界同时包含应用程序和基础结构服务。 应用程序服务提供服务层的公共API。 它们还充当交易边界并负责授权。 基础结构服务包含“管道代码”该“管道代码”与外部资源例如文件系统数据库或电子邮件服务器进行通信。 通常不止一个应用程序服务会使用这些方法。 存储库层是Web应用程序的最低层。 它负责与使用的数据存储进行通信。 属于特定层的组件可以使用属于同一层或其下一层的组件。 经典的Spring Web应用程序的高级体系结构如下所示 我们要做的下一步是设计每一层的接口这是我们遇到诸如数据传输对象DTO和域模型之类的术语的阶段。 这些术语描述如下 数据传输对象是一个仅是简单数据容器的对象这些对象用于在不同进程之间以及应用程序各层之间承载数据。 域模型由三个不同的对象组成 域服务是一种无状态类提供与域概念相关但不是实体或值对象的“自然”部分的操作。 现在我们知道了这些术语的含义我们可以继续设计每一层的接口。 让我们一层一层地进行检查 Web层应仅处理数据传输对象。 服务层将数据传输对象和基本类型作为方法参数。 它可以处理域模型对象但只能将数据传输对象返回到Web层。 存储库层将实体和基本类型作为方法参数并返回实体和基本类型。 这就提出了一个非常重要的问题 我们真的需要数据传输对象吗 为什么我们不能仅将实体和值对象返回到Web层 这是一个坏主意有两个原因 域模型指定了我们应用程序的内部模型。 如果我们将此模型暴露给外界则客户将不得不知道如何使用它。 换句话说我们的应用程序的客户将不得不照顾不属于他们的东西。 如果使用DTO则可以向应用程序的客户端隐藏此模型并提供更简单更简洁的API。 如果我们将领域模型暴露给外部世界那么我们在不破坏依赖于它的其他内容的情况下就无法更改它。 如果我们使用DTO只要不对DTO进行任何更改就可以更改域模型。 经典Spring Web应用程序的“最终”架构如下所示 还有许多未解决的问题 这篇博客文章描述了Spring Web应用程序的经典体系结构但未提供对真正有趣的问题的任何答案例如 为什么X层负责关注点Y 我们的应用程序应该包含三层还是少于三层 我们应该如何设计每一层的内部结构 这样做的原因是简单的 我们必须学会走路才能跑步 。 本教程的下一篇博客文章将回答这些问题。 翻译自: https://www.javacodegeeks.com/2014/10/understanding-spring-web-application-architecture-the-classic-way.htmlspring体系结构