CSMS2软件架构

CSMS2软件架构

概述

系统采用C/S架构,使用Dotnet 4.0框架。系统基于多层(N-Layer)架构进行设计和开发。系统分为表示层、应用层、业务逻辑层、引擎调度层、引擎层、服务层、基础架构层、实体层、资源层等多层。下图为项目的分层效果图:

表示层

CSMS2.Presentation也称界面层,所有的UI界面都会放到这一层实现。表示层的目标是保持它尽可能的薄,这一点和应用层相似。表示层需要避免嵌入业务逻辑。表示层有两个主要责任:

1)     解释用户命令,将请求发送到应用层

2)     显示信息给用户

对于数据校验和动态查询系统都使用Entity上增加特性来实现。对于提示信息不允许直接使用中文,需要用GetString方法替换。GetString中写入对应的数值。具体的中文在对应的CSMS2.Resources的资源文件中。表示层需要调用的公共方法都在CSMS2.Infrastructure中。

对于界面的.cs文件,要求每张界面都有制作人的说明,对于发现没有写的将等同编译不通过一样处理。对于每一个.cs文件的大小原则上不允许超过500行。对于选项卡过多的界面可以考虑使用UserControl或partial实现。

最终的表现层只会有一个。由于迁移项目的需要,可以暂时建立CSMS2.Presentation.BiaoWuGL的项目。避免项目文件被迁出,不能使用的情况发生。如果是新窗体则应该建立好Form后,马上把项目签入。

应用层

CSMS2.Application应用层可以理解为应用编程接口(API),它负责将表示层的请求发送给相应的服务层、业务逻辑层、引擎层、引擎调度层进行处理。换句话说应用层可以调用服务层、业务逻辑层、引擎层、引擎调度层。应用层没有任何的代码实现,它仅仅负责对其他层的方法调用。应用层使用WCF服务实现。制作时注意WCF用接口实现,必须实现对应的接口。应用层的命名就是对应的菜单大类名。比如BiaoWuGL.svc、XiTongPZ.svc、Common.svc等。现在比较模糊的可能是系统配置和公共的归类。XiTongPZ中只是定义系统配置界面的一些公共方法。比如YuanGongXX_BaoCun、CaiDanPZ_ChaXun等。而我们需要使用的一些公共方法比如根据大类获取词语列表、等等方法都将放在Common中。Application中方法会很多,原则上接口中的方法不应超过20个,但我们肯定超了。又不想在表示层引用过多的WCF,所以该层只做调用,并且不存在对多个方法的调用。

业务逻辑层

CSMS2.BLL业务逻辑层,该层将被应用层调用,该层将按照功能模块进行命名。命名规则需遵循< FunctionName>的命名规则,例如: ChaiBiao、FuZhuang等。对于属于引擎的增删改由对应的引擎实现。对于公共的数据库操作需调用服务实现。也就是说业务逻辑实际上被分成3块。服务、业务逻辑、引擎。这里比较纠结的应该是引擎的查询。这里暂做如下定义:对引擎的查询都直接使用存储过程或DataAccess的默认查询实现。

服务层

CSMS2. Service服务层,在写业务逻辑时,有些类的行为不适合放在任何一个类中。试图把某些行为放到一个不是真正拥有它的类中,会造成业务逻辑层的模糊。CSMS2将这些公共的方法放在服务层,供应用层、业务逻辑层或引擎层调用。

引擎层

CSMS2.Engine引擎层,该层被讨论多次,由多个相关的数据表组合成一个引擎,引擎对外统一暴露方法,供业务逻辑层调用。总体上分为表务引擎、客户关系引擎、待处理引擎等。具体哪些数据表属于什么引擎,由CSMS2项目负责人确认,各小组提出自己的意见。

引擎调度层

CSMS2.EngineService引擎调度层,有时候一个应用需要调用多个引擎,比如待处理转销时需调用待处理和特账两个引擎等。像这种需要多个引擎协调工作的方法放在引擎调度层。

实体层

      CSMS2.Entity实体层,每一张数据表或视图都会建立对应的实体,对应的实体操作等会建立在CSMS2. DataAccess的命名空间下,但其实entity和dataaccess是生成在同一个文件中的。对应的模板暂由codesmith生成,项目已提供了小工具GenCode生成对应的代码。自动生成的sphelper也放在CSMS2.Entiy中,但命名空间使用CSMS2.StoredProcedure。鉴于目前存储过程过多的现状,生成时需指明大类名称。如:BiaoWUGL、DaiChuL等对于通用存储过程需指明Common。

基础架构层

CSMS2.Infrastructure基础架构层是所有CSMS2系统底层基础代码所在的地方。任何类型的非数据库交互的通用代码都将放在这一层。

资源层

CSMS2.Resources资源层主要是放入资源文件、非引用所必须的DLL、图片文件等程序需要访问的资源。生成时和主项目一起输出到Bind目录,保证主项目能够访问到这些资源。同时将其从表示层剥离出来,避免表现层文件过多。

external-references

对于外部的DLL引用,统一使用放在external-references的解决方案目录下。避免引用绝对路径等问题。

其他

一些项目需要,但不需要经常编译的项目会归入CSMS2.Tool的解决方案。主方案中直接使用DLL引用,DLL放在external-references中。方案中会包括更新、扫描控件、计划任务、一键发布、系统配置等功能。

 

posted on 2012-05-30 13:30  zyi  阅读(661)  评论(0编辑  收藏  举报

导航