设计一个灵活稳定的多层架构的程序不是件容易的事情。当有了成熟的模式和应用之后,还需要经历各种应用与需求考验,用直白的话说,就是要经得起折腾。最近在重构自己的EPN框架时,有了一些新的体会实践,与各位分享。
首先是数据库的设计,一个框架数据库驱动多个业务逻辑数据库,这已经是大家所推荐的模式了。
如图所示,框架数据库Framework包含业务数据的基础配置,它可以驱动一套或多套业务数据库的运行。
Framework是框架数据库,它包含基础的业务规则,查询,菜单组件,权限,版本管理等。这个框架可以驱动Northwind数据库,以实现北风贸易程序,驱动emp51以实现ERP程序,等等。
在客户端程序登陆时,需要选择数据库为Northwind以表示登陆北风贸易数据库。这个地方还有些改进之处,可以将Database改成Company或System以变成更专业的系统名称,这在后面还有说明。
进入Enterprise Solution系统后,选择数据库注册,调出如下的界面,可以看到它的实现部分
框架数据库驱动业务数据库的全部的秘密就在这里了。Connection Parameter是连接字符串参数,在这里配置的是连接本机SQL Server Express的Northwind数据库,下面的Grid中显示与这个数据库相关的业务逻辑与接口。
Module Name | 模块的名称,比如ERP系统中有以下几个模块Engineering,Sales,Purchasing,Production Planning等等 |
Type | 模块类型是,这里是关键的设置点。 IService 接口模块,它定义功能的接口 Service 实现,实现接口中的功能 一个系统中,必须包含一个接口模块,可以有多个实现模块。 BusinessLogic 业务逻辑 为客户定制的业务逻辑 Presentation 展现层,也是界面层。在这里是用的WinForms技术,也可以换成WPF技术,或是SilverLight,ASP.NET Web/MVC,因为界面层只负责绑定数据,业务逻辑已经完整分离到BusinessLogic层中。 |
Path | 模块对应的程序集,通常是一个dll assembly。 |
在这个版本的EPN框架中,实现了框架程序与业务程序的完全解藕。比如需要以Northwind数据库为基础设计一个贸易程序,它的解决方案视图是这样的
这个视图就是上面公司注册中的代码视图,接口(IService)与实现(Service),业务逻辑(BusinessLogic),再加一个界面层Administration管理贸易订单,客户往来。经由这种设计方法,把业务逻辑及其实现彻底分离出去,以实现通用的C#.NET Win Forms开发框架。
这种设计也有一些缺陷。比如,当业务逻辑过于分散或是完全不相同时,框架数据库也需要重新调整。这里的调整,是数据库内容的重新生成,而不需要对代码作出变更。比如,业务逻辑涉及的查询,报表,菜单,用户喜好(Personalize),功能权限,用户权限都放在框架数据库中,当重新开发一个新项目时,你需要调用如下的系统功能,重新生成这些基础的数据以适应新系统的要求。
功能及其权限
菜单定义
报表定义也需要重新配置参数。
启动查询设计师重新设计查询,以适应新的业务逻辑需要。
最后一项工作内容是翻译资源的重新调校,您需要根据业务需要对翻译作出适当的修改。比如,Style 可翻译为样式,在制衣行业的系统中,应当翻译为款式。
经过这些数据准备工作,新项目的就差不多完成了一半。后面的部分就是完成针对客户的要求,做出各种设计,以确保您的项目准时交货。