浅谈项目系统架构分层

2017 年 7 月 30 日 架构文摘 张松然

本文粗浅的讨论下关于项目系统架构的拆分模型,阐述每个层次(layer)的作用,以及面向SOA编程提供服务的方式。


服务端架构解决之道


大家看到这张图,用了一个形象的比喻来体现传统的服务端软件。最下层是操作系统,通常是Linux,最上层是我们的业务功能和服务。在服务端架构,很习惯用增加一个架构层次的方式来解决问题。例如缓存层、数据访问层。在架构上按照自己的意愿去搭建不同层次的衔接环节,使架构具有足够的灵活性和扩展性。即时堆成这样,它依旧是非常合理的。




MVC Framkwrok


MVC即Model、View、Controller,这种开放方式把数据和显示分开,使得同一种数据可以以各种各样的方式展现给用户,而我们需要改动展现方式的时候并不需要改动Model层的内容。



在上图中展现了MVC中各个模块之间的通信方式,其中,Controller可以无限制的与Model和View通信,Controller需要从Model层拿到数据,并告诉View层如何显示这些数据。图中红色的箭头表明,Model与View之间是绝对不能相互通信的 ,这样做是为了降低模块间的耦合度,方便修改和维护。另外,图中的双黄线,也表明Model是绝对不能跨过黄线与View有关系的。其中有点难以理解的是Model和Controller以及View和Controller之间的线是实现与虚线混合,虚线表示Controller可以跨过。


# Model与Controller通信



Model与Controller之间是用实线表示,这表明Model并不能随意的访问Controller,但是有时Controller是需要接收Model层的消息的。在MVC模式中,要实现Model层到Controller层的通信,使用了一种类似广播的方式。Model中数据变化时,Model会发出一条广播,然后对这个Model感兴趣的Controller就会收到广播并告诉对应View改变现实方式。


MVC中的Controller,即控制器,控制着整个程序的逻辑和Model如何显示到View层。Controller把Model和View连接起来,让我们可以在View上看到Controller想要Model层现实的样子。


# View与Controller通信



在程序过程中,View层其实是需要与Controller通信的,当然View层不可能直接调用Controller的某个方法来处理用户点击事件,因为View不知道该使用 Controller中的哪个方法。因此,使用了一种叫做Target的方式来处理这个问题,Controller会事先告诉View,如果触发了某个事件,View就会把这个动作转给Target。然后Controller运行完该方法,处理好这个时间以后就会告诉Veiw。


# Delegate 方式



View与Controller之间通信还会有另一种方法 —— 代理。


项目层次的划分


所有用Maven管理的真实项目都是分模块的,每个模块对应一个pom.xml。它们之间通过继承和聚合相互关联。项目层次的划分会使整个项目的框架清晰起来。项目层次的划分需要遵循一个设计模式原则:高内聚,低耦合 。


一个简单的Maven模块结构如下图,注意依赖的传递性。



其中Web是负责提供Action / Controller,Service负责业务逻辑处理,Manager负责事务数据规整,Dao负责ORM逻辑,Domain管理Pojo对象。而RPC负责调用外部资源,Remoting负责提供对的请求。而在提供对外服务的时候,我们还会提供API或Client这样的引用包,它们的区别在于API提供的是协议包,而Client是客户包。API和Client拥有不同的 应用场景,Client包可能包含业务逻辑,会占用宿主服务器的系统资源 ,API仅仅是传输的协议定义。


SOA框架


SOA是Service-Oriented Architecture,它是一种支持面向服务的架构样式。从服务、基于服务开发和服务的接口来看,面向服务是一种思考方式。



Reference:

http://2sxc.org/en/Blog/post/javascript-mvc-you-need-a-good-mvc-framework

http://www.jianshu.com/p/79cc250be1b2


出处:http://www.linkedkeeper.com/detail/blog.action?bid=153


版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。


-END-


架构文摘

ID:ArchDigest

互联网应用架构丨架构技术丨大型网站丨大数据丨机器学习

更多精彩文章,请点击下方:阅读原文

登录查看更多
1

相关内容

AI创新者:破解项目绩效的密码
专知会员服务
34+阅读 · 2020年6月21日
最新《经济学中的强化学习》2020大综述,42页pdf128篇文献
【斯坦福大学-论文】实体上下文关系路径的知识图谱补全
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
【文献综述】边缘计算与深度学习的融合综述论文
专知会员服务
166+阅读 · 2019年12月26日
腾讯推荐引擎组员工:谈谈推荐系统架构
腾讯大讲堂
14+阅读 · 2019年10月23日
专访阿里亚顿:Serverless与BFF与前端
前端之巅
45+阅读 · 2019年5月8日
从webview到flutter:详解iOS中的Web开发
前端之巅
5+阅读 · 2019年3月24日
【泡泡一分钟】动态环境下的高效长时间建图
泡泡机器人SLAM
6+阅读 · 2019年2月1日
业务中台:如何在互联时代,快速响应用户需求?
互联网er的早读课
24+阅读 · 2018年12月26日
对话式交互技术原理及流程揭秘
AI前线
5+阅读 · 2018年5月24日
基于 Storm 的实时数据处理方案
开源中国
4+阅读 · 2018年3月15日
开源巨献:阿里巴巴最热门29款开源项目
算法与数据结构
5+阅读 · 2017年7月14日
Efficient and Effective $L_0$ Feature Selection
Arxiv
5+阅读 · 2018年8月7日
Arxiv
6+阅读 · 2018年5月22日
VIP会员
相关资讯
腾讯推荐引擎组员工:谈谈推荐系统架构
腾讯大讲堂
14+阅读 · 2019年10月23日
专访阿里亚顿:Serverless与BFF与前端
前端之巅
45+阅读 · 2019年5月8日
从webview到flutter:详解iOS中的Web开发
前端之巅
5+阅读 · 2019年3月24日
【泡泡一分钟】动态环境下的高效长时间建图
泡泡机器人SLAM
6+阅读 · 2019年2月1日
业务中台:如何在互联时代,快速响应用户需求?
互联网er的早读课
24+阅读 · 2018年12月26日
对话式交互技术原理及流程揭秘
AI前线
5+阅读 · 2018年5月24日
基于 Storm 的实时数据处理方案
开源中国
4+阅读 · 2018年3月15日
开源巨献:阿里巴巴最热门29款开源项目
算法与数据结构
5+阅读 · 2017年7月14日
Top
微信扫码咨询专知VIP会员