软件=商业+架构+过程+组织,前一阵子谈论的Scrum更多包含的是过程和组织,这篇主要关注的是架构。
作了开发多年,期间也参考了业界一些著名的软件厂商的产品,现在已经开始实现一个适合信息系统的平台,本篇将从总体上介绍一下OpenExpressApp是什么。OpenExpressApp没有创新性的技术,它更多的是将现有技术和产品中有价值的部分引入到一起。
在讲解现在OpenExpressApp的情况前,我先罗列一些开发的选择,这些就如同敏捷的价值观一样,决定了我开发这个框架的总体思路和方向。
- 从单项目开发到基于领域工程
信息系统存在很多共性,而领域工程是解决产品族的一个有效方法,它通过把领域工程和应用工程作为两个独立的开发流程来看待。《软件工厂方法》和软件工厂方法(二):软件工厂应用中已经介绍过了领域工程的一些知识。
开发架构时,从基于单项目开发到基于领域工程来开发,会考虑到如何快速方便开发,如何做定制化,因为设计的时候就会考虑应用工程时如何通过配置来实现功能。
- 从代码为中心到模型驱动
基于信息系统的共性抽取,建立一系列的模型(如领域模型、报表、UI等)来表达系统,通过代码生成器生成部分代码或者直接在框架之上运行模型,开发人员更多的关注于编写业务代码,如本篇最下面的编写Command。这样可以从框架级别进行复用。
- 从面向数据库到面向对象
代码中遍布表和记录的操作,还有业务逻辑遍布在SQL中,在处理简单应用时,这无疑是一种快速方便的方法,但是随着系统的复杂化,这将使得可维护性 很差。而面向对象是已经验证的很好解决复杂问题的方法,而系统系统时一旦深入开发就会遇到复杂的业务,所以面向对象的使用将是一种必然。
- 软件复用层次
大家经常在开发软件时会谈到软件复用,我认为从实现来看复用包含以下三个级别:函数/类、模块/引擎和应用包/框架。在开发过程中,我们应该尽量多考虑大粒度的复用元素,在不同层次都关注复用。
- 参考
在目前设计和实现的过程中,主要参考了ExpressApp Framework(应用框架),MetaEdit+(元模型工具),使用了CSLA作为分布式业务对象框架,Composite WPF作为UI框架,还使用了其他一些代码(如 LiteORM、Flee等)。这些参考的产品本身就含有比较多的思想和模式,建议没有看过的或者简单了解的可以再去研究一下,这样对框架的设计非常有好处。
- Roadmap
OpenExpressApp不同于以往独立的开发工具和框架,是为业务分析人员、软件设计和开发人员提供的一种集成的开发平台,它基于业务模型驱动开发 指导思想,提供报表、流程、元数据等基础引擎,具有业务建模、领域建模和应用建模等模型,并提供权限、报表等多个通用应用模块。为了支持软件开发,还提供 基于敏捷思想的软件项目管理工具、快速原型工具和测试支持。
简单地说就是使用DSM方法进行模型驱动开发,作为信息系统的开发平台,支持B/S、C/S、Mobile,支持局域网和广域网。
- 现状
借鉴ExpressApp的AutoUI和扩展的思想,这里的UI层也是通过模型自动生成。
以下为现在的代码组织。OpenExpressApp为框架代码,GIX4开头的为项目组应用框架时写的类库和扩展Command等代码。目前只支持WPF,还不支持B/S。
现状模型只是实现了通过类的属性来实现,还未实现模型编辑器。例如下面在类上定义属性可以自动在主界面生成导航项,双击后可以打开模块,模块界面也是自动生成。现在界面都只是根据模板生成,还不支持通过设计器来设计界面。
以下是一个通过在代码中WPFListViewCommand继承下来的一个命令,在命令上写上属性内容后,就可以在界面自动生成按钮,这样开发人员可以更多关注业务逻辑,而不用关注界面的变化了。
关于OEA更多内容,可以看我的电子书
另,现在OEA的领域实体框架Rafy2 发布了