【软件开发】架构设计Structure-下篇
Start:关注本公众号后,可直接联系后台获取排版美化的详细文档!
Hints:本篇文章所编纂的资料均来自网络,特此感谢参与奉献的有关人员。
架构风格演化
二层C/S架构
1二层 C/S 结构为单一服务器且以局域网为中心,所以难以扩展至大型企业广域网或Internet;(使用范围)
2软、硬件的组合及集成能力有限;(扩展性)
3服务器的负荷太重,难以管理大量的客户机,系统的性能容易变坏;(性能)
4数据安全性不好。因为客户端程序可以直接访问数据库服务器,那么,在客户端计算机上的其他程序也可想办法访问数据库服务器,从而使数据库的安全性受到威胁。(安全)
三层C/S架构
-表现层(Web层)
负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求 web,web层需要接收 http请求,完成http响应。
表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。
表现层的设计一般都使用 MVC 模型。MVC 是表现层的设计模型,和其他层没有关系。
-业务层 (Service层)
它负责业务逻辑处理,和我们开发项目的需求息息相关。web层依赖业务层,但是业务层不依赖Web层。
业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。 (事务应该放到业务层来控制)
-持久层 (dao 层)
负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口;业务层需要通过数据访问层将数据持久化到数据库中。
持久层就是和数据库交互,对数据库表进行增删改査的。
(1)允许合理地划分三层结构的功能,使之在逻辑上保持相对独立性,从而使整个系统的逻辑结构更为清晰,能提高系统和软件的可维护性和可扩展性。(逻辑独立清晰, 可维护性/可扩展性)
(2)允许更灵活有效地选用相应的平台和硬件系统,使之在处理负荷能力上与处理特性上分别适应于结构清晰的三层;并且这些平台和各个组成部分可以具有良好的可升级性和开放性。(可升级性/开放性)
(3)三层C/S架构中,应用的各层可以并行开发,各层也可以选择各自最适合的开发语言。使之能并行地而且是高效地进行开发,达到较高的性能价格比;对每一层的处理逻辑的开发和维护也会更容易些。(开发维护成本/速度/技术门槛)
(4)允许充分利用功能层有效地隔离开表示层与数据层,未授权的用户难以绕过功能层而利用数据库工具或黑客手段去非法地访问数据层,这就为严格的安全管理奠定了坚实的基础;整个系统的管理层次也更加合理和可控制。(安全)
三层B/S架构
-用户在使用系统时,仅仅需要一个浏览器就可运行全部的模块,真正达到了“零客户端”的功能,很容易在运行时自动升级。(客户端)
-基于B/S架构的软件,系统安装、修改和维护全在服务器端解决。(服务端)
-B/S架构还提供了异种机、异种网、异种应用服务的联机、联网、统一服务的最现实的开放性基础。(开放性)
缺点:
B/S架构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。
B/S架构的系统扩展能力差,安全性难以控制。
采用B/S架构的应用系统,在数据查询等响应速度上,要远远地低于C/S架构。(性能)
B/S架构的数据提交一般以页面为单位,数据的动态交互性不强,不利于OLTP应用.
MVC架构风格
MVC 全名是 Model ViewController,是模型(model)-视图(view)-控制器(controller)的缩写,它是分层架构风格的一种。主要解决 将与 UI 相关的逻辑都定义在针对视图的相关元素的事件上 的问题。
MVC 中各个部分的分工与协作:
-Model 是对应用状态和业务功能的封装,我们可以将它理解为同时包含数据和行为的领域模型。Model 接受 Controller 的请求并完成相应的业务处理,在状态改变的时候向 View 发出相应的通知。【同时包含数据和行为的领域模型】
-View 实现可视化界面的呈现并捕捉最终用户的交互操作(例如鼠标和键盘的操作)。
-View 捕获到用户交互操作后会直接转发给 Controller,后者完成相应的 UI 逻辑。如果需要涉及业务功能的调用,Controller 会直接调用 Model。在完成 UI 处理后,Controller 会根据需要控制原 View 或者创建新的 View 对用户交互操作予以响应。
MVP 的架构风格
MVP 是从经典的模式 MVC 演变而来,它们的基本思想有相通的地方:Controller/Presenter 负责逻辑的处理,Model 提供数据,View 负责显示。
当然 MVP 与 MVC 也有一些显著的区别,MVC 模式中元素之间“混乱”的交互主要体现在允许 View 和 Model 直接进行“交流”,这在 MVP 模式中是不允许的。在 MVP 中 View 并不直接使用 Model,它们之间的通信是通过 Presenter (MVC 中的 Controller)来进行的,所有的交互都发生在 Presenter 内部,而在 MVC 中 View 会直接从 Model 中读取数据而不是通过 Controller,从而避免了 View 和 Model 之间的耦合。
因为 View 层和 Model 层都需经过 Presenter 层,致使 Presenter 层比较复杂,维护起来会有一定的问题。而且因为没有绑定数据,所有数据都需要 Presenter 层进行“手动同步”,代码量比较大,虽然比 MVC 模型好很多,但也是有比较多的冗余部分。
MVVM架构
View 层和 Model 层之间数据的传递也经过了 ViewModel 层, ViewModel 层并没有对其进行“手动绑定”,不仅使速度有了一定的提高,代码量也减少很多,相比于 MVC 和 MVP,MVVM 有了长足的进步。
MVVM 的框架图与 MVP 的框架图相似,确实如此,两者都是从 View 层开始触发用户的操作,之后经过第三层,最后到达 Model 层。但是关键问题是这第三层的内容, ViewModel 层双向绑定了 View 层和 Model 层,因此,随着 View 层的数据变化,系统会自动修改 Model 层的数据,反之同理。而 Presenter 层是采用手动写方法来调用或者修改 View 层和 Model 层。
Web应用中的MVVM模型:
富互联网应用(RIA)
架构风格与设计模式
-架构风格往往是从全局的角度来考虑问题,他是一种独立于实际问题的通用组织结构。例如,常用的B/S架构,在很多不同的系统中,都有应用。
-而设计模式着眼于解决某一特定的局部问题,是一种局部解决方案的应用。例如,在很多的软件系统中,创建对象时,希望有统一的机制对这些对象的创建进行管理,所以出现了工厂模式,创建者模式等设计模式。比如java内存垃圾的回收机制也做成了一种设计模式。
质量属性分析
质量属性类别:
1)、系统的质量属性。(可用性、可修改性、性能、安全性、可测试性和易用性)
2)、受架构影响的商业属性。(上市时间、成本和收益、所希望的系统生命期的长短、目标市场、推出计划、与老系统的集成)
3)、与架构本身相关的一些质量属性。(概念完整性、正确性与完整性、可构建性)
质量属性列表:
参考资料:
软件体系架构阅读笔记(九) - 算法网 (itpcb.com)
https://itpcb.com/a/701414
软件架构概览-架构-火龙果软件工程 (uml.org.cn)
http://www.uml.org.cn/zjjs/zjjs-bk.asp
常用软件架构模式_软件架构模式的处理过程_经典软件架构模式_常用16味药膳药材_新闻头条 (xinwentoutiao.net)
https://www.xinwentoutiao.net/jishu/20200502/1276760.html
MVC、MVP、MVVM的区别和联系(精讲版) (biancheng.net)
http://c.biancheng.net/view/7743.html#:~:text=MVC%E3%80%81MVP%E3%80%81MVVM%20%E4%B8%89%E8%80%85%E7%9A%84%E4%B8%BB%E8%A6%81%E5%8C%BA%E5%88%AB%E5%B0%B1%E5%9C%A8%E4%BA%8E%E9%99%A4%20View%20%E5%B1%82%E5%92%8C%20Model%20%E5%B1%82%E4%B9%8B%E5%A4%96%E7%9A%84%E7%AC%AC%E4%B8%89%E5%B1%82%EF%BC%8C%E8%BF%99%E4%B8%80%E5%B1%82%E7%9A%84%E4%B8%8D%E5%90%8C%E4%BD%BF%E5%BE%97,MV%20%E7%B3%BB%E5%88%97%E6%A1%86%E6%9E%B6%E5%8C%BA%E5%88%86%E5%BC%80%E6%9D%A5%E3%80%82%20%E5%85%B6%E5%AE%9E%E5%BE%88%E9%9A%BE%E8%AF%B4%E5%87%BA%20MVC%E3%80%81MVP%E3%80%81MVVM%20%E5%93%AA%E4%B8%80%E4%B8%AA%E6%9B%B4%E5%A5%BD%EF%BC%8C%E4%BB%8E%E8%A1%A8%E9%9D%A2%E4%B8%8A%E7%9C%8B%EF%BC%8C%E6%98%BE%E7%84%B6%E6%98%AF%20MVVM%20%E6%9C%80%E5%A5%BD%EF%BC%8C%E4%BD%BF%E7%94%A8%E8%B5%B7%E6%9D%A5%E6%9B%B4%E6%96%B9%E4%BE%BF%EF%BC%8C%E4%BB%A3%E7%A0%81%E7%9B%B8%E5%AF%B9%E4%B9%9F%E8%BE%83%E5%B0%91%E3%80%82
Android安卓架构MVC、MVP、MVVM之间的区别和联系(图解+案例+源码)_快乐李同学的博客-CSDN博客_android mvc mvp mvvm区别
https://blog.csdn.net/wq6ylg08/article/details/105023009
模式浅谈_风一样的少年-CSDN博客_mvc mvp mvvm
https://blog.csdn.net/qq_42127861/article/details/105876263
MVC、MVP、MVVM特点及三者的区别_Ancecis的博客-CSDN博客
https://blog.csdn.net/Ancecis/article/details/104204326
MVC,MVP 和 MVVM 的图示 - 阮一峰的网络日志 (ruanyifeng.com)
https://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html
MVC、MVP、MVVM模式的概念与区别 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/377518336
MVC、MVP、MVVM模式的概念与区别 - 简书 (jianshu.com)
https://www.jianshu.com/p/ff6de219f988
简单介绍 10 个常见的软件架构 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/41395345#:~:text=%E7%AE%80%E5%8D%95%E4%BB%8B%E7%BB%8D%2010%20%E4%B8%AA%E5%B8%B8%E8%A7%81%E7%9A%84%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%201%20%E5%88%86%E5%B1%82%E6%A8%A1%E5%BC%8F%20%28Layered%20pattern%29%202,%E6%A8%A1%E5%BC%8F%EF%BC%88Model-vi%20...%209%20%E9%BB%91%E6%9D%BF%E6%A8%A1%E5%BC%8F%EF%BC%88Blackboard%20pattern%EF%BC%89%2010%20%E8%A7%A3%E6%9E%90%E5%99%A8%E6%A8%A1%E5%BC%8F%EF%BC%88Interpreter%20pattern%EF%BC%89
五种常见软件架构 - 时间朋友 - 博客园 (cnblogs.com)
https://www.cnblogs.com/doit8791/p/9343826.html
浅析常用软件架构的三种架构模型 - 云+社区 - 腾讯云 (tencent.com)
https://cloud.tencent.com/developer/article/1116141
十大常用软件架构模式简介 - 简书 (jianshu.com)
https://www.jianshu.com/p/128ec31551b7
四大常用的软件架构,来看看你们公司用哪种?
-程序人生-Web开发者网 (webkfz.com)
http://webkfz.com/cxrs/eass.html
最常用的4 大软件架构 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/343457113
软件架构入门 - 阮一峰的网络日志 (ruanyifeng.com)
https://www.ruanyifeng.com/blog/2016/09/software-architecture.html
软件架构设计-软件架构风格、分层架构 - 惊觉 (leheavengame.com)
http://leheavengame.com/article/60dbbb53049f556e1a231ffe
《软件架构设计》学习笔记 (uml.org.cn)
http://uml.org.cn/zjjs/201307151.asp
逻辑架构和物理架构在架构设计中的应用 (uml.org.cn)
http://www.uml.org.cn/zjjs/200906045.asp
软件架构设计 (uml.org.cn)
http://www.uml.org.cn/zjjs/201107193.asp
《软件架构》总览 | 并发编程网 – ifeve.com
http://ifeve.com/%E3%80%8A%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%E3%80%8B%E6%80%BB%E8%A7%88/
公众号二维码
End:如果有兴趣了解金融量化交易和其他数据分析的实用技术,欢迎关注本公众号