Spring应用架构

我最近收到我博客的一位读者Ajay的问题,并决定在此处分享我的答案,以帮助其他有类似问题的人。

这是来自阿杰的问题:

大卫您好,我想知道我最近遇到的两种MVC应用程序体系结构之间的区别:

1)在普通的Spring MVC教程中使用的...模型,视图,控制器,配置,DAO和资源。
2)更精细的架构,其中将应用程序分为模块(例如,结帐,购物车),每个模块都有自己的包,其中包含控制器,服务接口,服务Impl和实体/模型。

谢谢阿杰

好问题!

这两个选项不是互斥的,实际上,它们在设计良好的Web应用程序中是相辅相成的。

您可以将这两个选项视为垂直和水平分隔。

在讨论按模型,视图,控制器,配置,DAO等进行的分离时,我们讨论基于应用程序的不同层和组件。
技术(逻辑)设计。

这种分离的原因在于最重要的设计原则之一,单一职责和抽象设计模式。

单一责任

单一责任原则规定,任何一个组件都只能对一件事情负责(例如:购物车服务,但是为购物车和报告提供单一服务被认为是不良设计),并且不应有其他组件负责同一件事行为/状态(例如:应用程序中功能不相同的购物车服务不应多于一个)。

抽象化

抽象设计模式在组件(例如:数据库)之上引入了抽象层(例如:DAO层),同时声明了有关应用程序其余部分如何通过抽象层与该组件通信的协定(接口)。

这样可以更轻松地替换合同的基础实现(例如:您的DAO层现在可以使用JPA,但是明天您可以以相对较小的努力将其切换到Elasticsearch或Neo4j)。

另一方面,按模块(例如,结帐,购物车)分开是基于业务功能的。

这种分离还依赖于“单一责任”原则和“高内聚与耦合”原则。

内聚和耦合

内聚性是某个模块的组件如何相互组合的程度。

耦合度是指多少组件了解彼此的内部工作情况。

当您根据业务功能将模块分为不同的包时,将来可以更轻松地将这些模块重构为它们自己的微服务(Web应用程序)。 这样,他们每个人都可以拥有自己的部署生命周期,并且可以独立扩展。

翻译自: https://www.javacodegeeks.com/2018/08/spring-application-architectures.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP能不能让一串代码现实,一段让你认清现实的Java代码.java

/*** 答致命三问* 终回归现实*/public static void main(String[] args) {boolean a false,b false,c false;java.util.Scanner scanner new java.util.Scanner(System.in);System.out.println(decode("5oKo5aSa6auY77yIY23vvInvvJ8"));int height 0;while (hei…

java+springmvc+vo,springmvc+mybatis的实例详解

前面讲到:SpringSpringMVCMyBatis深入学习及搭建(十三)——SpringMVC入门程序(二)1.需求使用springmvc和mybatis完成商品列表查询。2.整合思路springmvcmybatis的系统架构:第一步:整合dao层mybatis和spring整合,通过spring管理map…

java是面向过程的编程语言吗,下列关于Java语言特点的叙述中,错误的是()。 A.Java是面向过程的编程语言B.Java支持分...

查询最近30天的记录应使用( )作为准则某企业年度主营业务收入为以下关于第一层ISP特征的描述中,错误的是测量电压时,应将数字万用表与被测电路并联。()HLAⅡ类分子主要分布于在铁碳合金相图中今年来,公务员逐渐成为广大高校毕业生所青睐的热门职业,但是报考公务员必…

了解为什么这个直观的工具是您团队的通用团队管理工具

每个项目管理工具都试图做同样的工具性工作:保持团队联系,按任务执行和按时完成重大计划。 但是市场变得非常拥挤,并且有充分的理由-没有平台似乎对人们需要看的东西以及应该如何显示这些信息具有正确的感觉,以便它们既可行又相关…

ecshop 模板 php代码,ecshop无法在模板文件.dwt和.lbi中直接添加php代码的解决方法...

ecshop不能在模板文件.dwt和.lbi中直接添加php代码了,为什么呢?因为直接在模板中加入php函数和代码,没有经过过滤,容易造成安全隐患。程序源码安全是比较重要的。不过如果有朋友希望能在模板文件中直接加入.dwt和.lbi文件&#xf…

php mail 在线,在线web e-mail发送

名称:CJ Web2Mail V3.0说明:很多网站的“Contact Us ”打开的是outlook,但很多人没装。本人提供的是web发。可以给管理员发信的人自动发一封确认信,同时管理员也可以收到一封!演示:http://phptext.512j.com(左下角的“…

jstl视图_使用JSTL视图探索Spring Controller

jstl视图让我们通过对Spring MVC的Controller开发的更多探索来改进我们以前的Spring JDBC应用程序 。 我将展示另一种编写新的Controller的练习,该Controller处理HTML表单并在JSP视图页面中使用JSTL标签。 要在Spring MVC应用程序中启用JSTL,您需要将以…

php5.6 连接 oracle,XAMPP中PHP5.6.3连接Oracle

系统环境:Windows 8.1 x64PHP 5.6.3 x86Apache/2.4.10 (Win32)Oracle Database 11g Enterprise Editionxampp-win32-5.6.3-0-VC11-installer.exe 这个版本很坑爹… 在 php.ini 中只有extensionphp_oci8.dll ; Use with Oracle 10gR2 Instant Clientextensionphp_oci…

模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST

机器学习/深度学习模型可以通过不同的方式进行预测。 我的首选方法是将分析模型直接部署到流处理应用程序(如Kafka Streams或KSQL )中。 您可以例如使用TensorFlow for Java API 。 这样可以实现最佳延迟和外部服务的独立性。 在我的Github项目中可以找到…

electronjs MySQL,javascript – 在Electron应用程序中使用sql.js.

我是Electron的新手.它非常棒,而且入门非常有趣而且非常简单.一段时间以来,我一直试图找到一个在我的应用程序中使用的“数据库”解决方案.当然有Web SQL /本地存储选项,但我试图使用SQLite.我找到了sql.js,它很棒且易于使用.我可以让一切正常运行放我无法保存/更新数据库文件&…

php ajax mysql 出错,MySql + PHP + Ajax的乱码问题的解决方案

现如今,基本的web2.0应用都会涉及到表现层、业务层、数据层等多个层次。在数据的来回传递中,新手一不注意就会产生汉字的乱码问题。汉字乱码主要是由于各层使用的编码、或在层间进行数据传输时使用的编码不一致造成的,釜底抽薪的解决办法就是…

读取csv文件 java_Java:逐步读取/流式传输CSV文件

读取csv文件 java我一直在做一些涉及读取CSV文件的工作,而我一直在使用OpenCSV ,而我的最初方法是逐行读取文件,解析内容并将其保存到地图列表中。 当文件的内容适合内存时,此方法有效,但对于较大的文件来说是个问题&…

php+数组转换函数是,php数组与字符串的转换函数大全

4.在字符串种中查找另外一个字符使用strpos()或strstr()函数strpos() 函数返回字符串在另一个字符串中第一次出现的位置。如果没有找到该字符串,则返回 false。语法://string为必须,表示被搜索的字符串//find为必须,表示被查找的字…

拥抱模块化Java平台:Java 10上的Apache CXF

Java 9版本终于将Project Jigsaw交付给大众已经过去了一年多的时间。 这是一段漫长的旅程,但是在那里,所以发生了什么变化? 这是一个很好的问题,答案并不明显和直接。 总的来说, 拼图项目是一种颠覆性的变化&#xff…

matlab sym转str,sym struct 转换

描述:用 sym() 生成了 矩阵; 再用 solve() 结果返回 结构体,还带sym 型。。。尝试:用 struct 转换 ; eval() 什么的 都无解,, (结构体还带sym。。。。昏了)求:怎…

php $r,PHP

本文实例为大家分享了php微信跳一跳的具体代码,供大家参考,具体内容如下 ?php require config.php; function similar($rgb1, $rgb2) { $r1 ($rgb1 16) $g1 ($rgb1 8) $b1 $rgb1 $r2 ($rgb2 16) $g2 ($rgb2 8) $b2 $rgb2 return abs($r1 - $r2) 1…

java 字符串对齐_最佳字符串对齐的Java实现

java 字符串对齐有一阵子,我使用了Levenshtein distance的Apache Commons lang StringUtils实现。 它实现了一些众所周知的技巧,通过仅挂接到两个数组而不是为备忘录表分配巨大的nxm表来使用较少的内存。 它还仅检查宽度为2 * k 1的“条带”,…

zabbix可以监控什么php,zabbix监控php

通过启用php-fpm的status页面,使用zabbix来获取各数据参数以达到监控php-fpm性能状态php-fpm配置配置文件php-fpm.confpm.status_path /fpmstatusping.path /fpmpingping.response pongnginx配置在配置的server内添加locationlocation ~ ^/(fpmstatus|fpmping) {…

建立无服务器的“ Hello World”功能

无服务器 ,功能即服务(FaaS)或仅具有云功能,就可以编写将在云中运行的代码。 您可以使用多种不同的语言(例如JavaScript(Node.js),Swift,Python,Java&#xf…

oracle 10g 分区管理,Oracle 10g分区表的自动维护

Oracle 10g分区表不支持自动化管理,一般都要手动创建分区,手动删除。今天给大家带来了一个自动化管理表空间的脚本。本脚本主要由3个部分组成:sys_ConfigTable.sql、sys_pro_AddAndDropPartition.sql、sys_pro_MergeTable.sql1、sys_ConfigTa…