我们经常在对相同需求进行着重复的设计和编码,这使得开发效率低,而且质量也得不到保证,OpenExpressApp 就是抽取了信息系统的一些共性,用平台的方式提供大粒度的重用,提高开发效率和质量。
在《信息系统开发平台openexpressapp 1.0发布》中提到过,OpenExpressApp不会带给大家创新性的技术,而是将现有技术和产品中有价值的部分引入到一起,它要做的是整合别人已经实践的方法,提高我们自身的开发能力,以求快速、高质量的开发产品。
下面我将通过对现有技术和产品的参考来讲解OpenExpessApp的架构,理解这些参考技术的架构是理解OpenExpressApp架构的最好办法。
为了提高产量和代码质量,我研究过一些产品和方法,而MetaEdit+是建立在DSM方法之上的工具,能够比较好提高产量和质量。
MetaEdit+
MetaEdit+是全球DSM领域内著名的产品,它能够带来以下好处:
- 缩短上市时间,开发生产力能够提高5-10倍
- 开发人员可以集中设计和关注业务功能,而不必用代码去写所有方面的内容
- 由于使用的是经过验证的工具,产品质量显著提高
- 可以完全控制模型和代码生成,而不像MDA方法模型和代码生成固定,不便于特定领域开发
从上图DSM方法知道模型和生成器是DSM的核心部分,而MetaEdit+的元模型比较好,所以OpenExpressApp的建模工具中模型部分将参考MetaEdit+。(由于现在还没有开始这部分内容,所以在这里就先不介绍了。)
从上图可以看到领域框架也是重要部分,所以接下来我就需要去搜索比较好的框架来参考。在我参考一些框架之后,我觉得DevExpress eXpressApp Framework比较适合,它是.Net下的一个应用框架。
DevExpress eXpressApp Framwwork (XAF)
DevExpress eXpressApp Framework是一种快速业务开发平台,它可以通过一个模型同时支持C/S和B/S应用。
它主要提供以下功能:
- 一个架构,OpenExpressApp参考了这个架构。如有图所示。
- XPO,一个ORM
- 对业务应用的UI进行了抽象,形成了一个UI模型,我叫它为AutoUI,就是通过类库以及模型自动生成界面,后面博文中我会单独解析AutoUI在OpenExpressApp的实现。
- 模块化架构
- 基础类库
- 基于角色的安全实现
- 数据验证
- 本地化支持
- 报表
- 与Visual Studio IDE 继承
OpenExpressApp名称中的ExpressApp词就来自这个应用框架,所以也暗示着OpenExpressApp参考了很多XAF的思想(架构、模块化、AutoUI等)。
XAF的基础类库建立在OO的思想上,所以我还需要一个支持OO的框架。而CSLA可以很好的支持类库开发和应用。
CSLA
CSLA是Component-based, Scalable, Logical Architecture的简写,它是由Rockford Lhotka1999年开始编写的基于.Net的一套N-tier分布式框架。它还在不断更新,现在也支持Silverlight。
它包含如下功能:
- 支持部署为单机、局域网和广域网
- 允许生成面向对象的业务层来封装业务逻辑和数据
- n层撤销功能
- 跟踪违反业务规则以确定某个对象是否有效
- 跟踪某个对象的数据是否发生了改变(是否“变脏”?)
- 支持对于子对象的基于强类型的集合
- 针对UI开发人员的一种简单抽象模型
- 对于Windows Forms、WPF和Web Forms中数据绑定的支持
- 表驱动的安全机制
- 其他各种特性
信息系统应用模块和功能会比较多,所以框架支持模块化就显得比较重要。第一阶段OpenExpressApp将实现基于WPF的应用,而微软模式小组编写的Composite WPF and Silverlight除了支持WPF外,也可以很好的支持模块化,所以我也使用了Composite WPF and Silverlight。
Composite WPF and Silverlight
XAF框架中不仅有类库,还有报表支持,而报表在信息系统中是不可缺少的,所以我还需要找到一个比较好的报表系统。我几年前研究过一阵子报表,润乾报表是我觉得模型最好的一个。感兴趣的可以参考我以前写的《研究润乾报表的实现》,在《软件工厂方法(二):软件工厂应用》中我也介绍过研究的一些方法。
润乾报表
- 类 Excel 报表设计模型
- 非线性报表模型
- 多源填报模型
- 强关联语义模型
以上主要说的是框架主要部分参考内容,框架思路选定后还需要一个集成环境来开发,所以我又去找了几个基于模型驱动开发的软件平台,目前准备参考Mendix 和Novulo
Mendix
Novulo
依据以上参考和个人经验,确定了如下一些架构指导思想。这个在《OpenExpressApp架构-一个信息系统开发平台》也有所介绍
架构总体思想
- 基于单项目开发 - 基于产品线开发
- 以独立技术为中心 - 以业务集成平台为中心
- 代码 - 模型
- 面向数据库开发 - 面向对象
- 不同复用层次: 函数/类 - 模块/引擎 – 应用包/框架
OpenExpressApp架构
以上对OpenExpressApp架构的起源以及参考的现有产品进行了简单介绍,后期我会对我如何使用这些产品或者采用这些产品思想分别进行介绍。如果大家对OpenExpressApp内部比较感兴趣的话,则理解这些已有产品将会有很大帮助。