首先是UI层很难由美工和系统设计师来总体设计,由于即使是Delphi之类的可视化开发工具,界面问题还是要程序员自己调整。解决这个问题可以走两条路:用自己的皮肤系统和美工本来就会IDE。
其次是服务层的标准缺少,虽然Corba之类早已出现,但是昂贵的费用和实施的难度太大了。事实上这样的服务层确实有象BEA的Tuxedo,IBM的CICS等,但伸缩性小,使用范围小,不算是老少咸宜。
最后是数据层一般是直接存取数据库,高级一点的是通用性强一点,能多访问几个数据库。但远没有到对象持久化这种程度。
传统三层架构B/S J2EE架构的推出带来了很大的进步,先前推出的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 嵌入式系统。开发各种其它设备上的应用系统。