系统架构分层设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
系统架构分层设计
本文讨论关于项目系统架构的拆分模型,阐述每个层次(layer)的作用,以及面向SOA编程提供服务的方式。
服务端架构解决之道
大家看到这张图,用了一个形象的比喻来体现传统的服务端软件。最下层是操作系统,通常是Linux,最上层是我们的业务功能和服务。在服务端架构,很习惯用增加一个架构层次的方式来解决问题。例如缓存层、数据访问层。在架构上按照自己的意愿去搭建不同层次的衔接环节,使架构具有足够的灵活性和扩展性。即时堆成这样,它依旧是非常合理的。
MVC Framkwrok
# 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。
所有用Maven管理的真实项目都是分模块的,每个模块对应一个pom.xml。它们之间通过继承和聚合相互关联。项目层次的划分会使整个项目的框架清晰起来。项目层次的划分需要遵循一个设计模式原则:高内聚,低耦合。
一个简单的Maven模块结构如下图,注意依赖的传递性。
其中Web是负责提供Action / Controller,Service负责业务逻辑处理,Manager负责事务数据规整,Dao负责ORM逻辑,Domain管理Pojo对象。而RPC负责调用外部资源,Remoting负责提供对的请求。而在提供对外服务的时候,我们还会提供API或Client这样的引用包,它们的区别在于API提供的是协议包,而Client是客户包。API和Client拥有不同的应用场景,Client包可能包含业务逻辑,会占用宿主服务器的系统资源,API仅仅是传输的协议定义。