二层架构带来的麻烦很多。
首先是UI层很难由美工和系统设计师来总体设计,由于即使是Delphi之类的可视化开发工具,界面问题还是要程序员自己调整。解决这个问题可以走两条路:用自己的皮肤系统和美工本来就会IDE。
其次是服务层的标准缺少,虽然Corba之类早已出现,但是昂贵的费用和实施的难度太大了。事实上这样的服务层确实有象BEA的Tuxedo,IBM的CICS等,但伸缩性小,使用范围小,不算是老少咸宜。
最后是数据层一般是直接存取数据库,高级一点的是通用性强一点,能多访问几个数据库。但远没有到对象持久化这种程度。
传统三层架构B/SJ2EE架构的推出带来了很大的进步,先前推出的PHP、ASP等嵌入式脚本语言只限于一种模板脚本语言而已,真正的架构还是从J2EE开始起的。
早期J2EE还未成熟,这张图应该是J2EE1.2以后的,至少是EJB2.0以后的。
在UI层与其他脚本嵌入语言类似,模板+脚本,仍然没有较好的Action功能,这直到Struts之类的出现才开始改观。
SeesionBean的出现加速了服务层的建立,让业务逻辑真正可以独立出现,尽管现实没有这么理想。
Entity Bean的出现,特别是CMP的出现,建立了对象持久层,数据库再也不需要了解细节了,甚至对象数据存在哪里都没人想知道了,虽然有这样那样的困难和问题。
现代多层架构多层架构是从开源开始的。
Struts是著名的MVC2,尽管现在看来问题还是不少,但是不可否认,它的功劳是显著的。
AspectJ带来了AOP,让开发换个思路。
Spring让这些看上去很简单,重新发掘Bean的力量。
WebWork、JSTL、Tapestry、JSF、PIO、Hibernate、Castor等等一系列的开源计划层出不穷,我可以列到你开始呕吐为止。
有很多显著的特点:
注重UI层的简化开发,强化模板引擎和组件开发,使Action或Lisnter成为标准配备。
服务层强调弱耦合,可以与多个轮子一起工作,方便更换合适的框架,甚至考虑兼容传统系统。
对象持久大行其道,都是针对EJB的软肋去的,但3.0的发布会弥补EJB的问题。
各大厂商争相抢夺市场,工具和服务器和版本飞涨,跳得比计价器还快。
XML大行其道,已经成为标准格式,至少是配置文件和转换模板的标准。
现代架构简介View 展示层。显示内容、接受用户人工信息。
Template Engine 模板引擎层。使用模板的方式产生最终View展示层的内容。
Action或Listener 动作或监视层。接受用户人工动作、根据动作反馈。
Control 控制UI层。控制UI的动作反馈、页面流程。
Service 服务层。除业务逻辑以外的系统逻辑、访问域逻辑的接口、转发访问域逻辑的请求。
Domain Logic 域逻辑层。业务逻辑、与传统遗留系统的业务逻辑接口。
Domain Model 域模型层。业务模型,与业务有关的对象模型树,包括对象属性和之间的关系。
XML Model。用XML定义的域模型。鉴于XML的重要性,单独列出。
Object Model。用Object对象来定义的域模型。
Object Persistent 对象持久层。将域模型对象持久化。
Database System 数据库系统。关系型或对象型数据库系统,代表了存储系统。
应用级架构可能应该称为实用架构,因为以下这些架构与现代架构不冲突,是建立在现代架构基础上的应用级架构。
光有现代架构当然对开发来说并没有省心,反而是更增加沟通和培训成本,因此应用级架构,或可称为中间件,非常重要。
应用级架构是用来解决各种业务问题的高层次架构。
Workflow 工作流。解决一切依赖流程的业务系统中的流程部分的问题。工作流只管流程。
E-Form 电子表单。解决一切业务系统中需要频繁变动界面。包括电子表单设计器和编译器。
Protal 门户。解决多个业务系统的高级集成。多业务系统不仅是展示层上的集成,更深入到互动地集成,将可能产生相互影响。
Data Exchange 数据交换。数据传输和格式转换。解决多个业务系统的数据交换问题。
Message 消息中间件。解决异步消息传输问题。
Instance Message 即时消息。解决即时沟通交流问题,并且允许与业务系统互动。
Real-Time 实时系统。对时间和高可靠性的要求。
Embedded嵌入式系统。开发各种其它设备上的应用系统。
Good luck