[size=small]MoCoolKaErp简介
设计原则:模型驱动、配置驱动、动作驱动、逻辑分离、易扩展
目标:
1)支持多种服务平台
2)支持复杂业务
3)在业务变动时代码改动量小
4)支持模块热升级
5)提供ERP需要的组件
6)提供详尽的日志,跟踪错误、调试性能
7)严格规定什么样的逻辑写在哪个部怎样写业务逻辑,避免逻辑混乱和重复。详见《怎样用MoCoolKaErp编写业务逻辑》
[size=x-small][/size][size=small][/size]
运行时分为ERP协议和参数两部分
ERP协议规定了Server逻辑处理过程
序列调用如下,7个接口,可以根据需要进行实现
客户端->MKService->ServiceAdapter->MKVerifyAccess->ComponentProcessor->BusinessProcessor->Handler->DataStroageProvider->数据库
MKService 服务 对外提供的服务,比如WCF,负责接收客户端的数据,建立服务适配器
ServiceAdapter 服务适配器,取得服务上下文和SESSION上下文,组织生标准数据格式向后传递
MKVerifyAccess 权限校验,校验是否有权限操作,通过向后传递。从本次开始进入到业务逻辑,前面是组织数据
ComponentProcessor 组件处理,与ERP提供的各种组件交互,比如及时消息,工作流引擎,数据转换服务等。在本层启动数据库事务,负责事务的提交和回滚
BusinessProcessor 业务处理 ,处理模块间的交互。
Handler 逻辑处理 ,指模块内部的逻辑
DataStroageProvider 数据访问层,提供对库的支持
参数在协议中上下文中传递
传递三个参数
MKEntity:实体 由客户端提交。
ServerRuntimeContext 服务上下文,保存服务器的信息。主要提供协议的调度功能
SessionContext session上下文,保存每个连接信息,主要提供事务功能
其它主要类
DefaultServer 缺省服务。根据配置加载组件、模块。最先启动的类。
MKModule 模块。模型驱动的核心。在协议中属于模块的有MKVerifyAccess->ComponentProcessor->BusinessProcessor->Handler。数据的有MKEntity和AccessRule
MKComponent 组件。外挂在ERP中,不影响主要的业务逻辑的部分。组件常常可以独立工作,比如及时消息,工作流引擎,数据转换服务等
AccessRule 访问规则。处理实体的字段级访问控制、按钮级访问控制,简单规则(必填、长度等)
动作驱动:与客户端交互每个动作有唯一号码,通过唯一号码服务端各个模块可以协调工作。
动作号码由12位数字组成 3位产品号 +3位模块号+3位保留位+3位动作号组成
其中动作号规定如下:
101:查询
102:增加弹出
103:修改弹出
104:查看
105:删除
106:关闭
112:增加提交
113:修改提交
产品号100由核心模块使用
配置驱动:配置可能存在xml文件也可以存储在数据库
下面是模块加载的例子
<?xml version="1.0" encoding="utf-8" ?>
<Modules>
<Module Name="ErpDefault" Remark="缺省模块">
<Action Id="000000" MKEntity=""
Handler="MoCoolKaErp.Handlers.CoreHandler,MoCoolKaErp" AccessRule="" MKVerifyAccess=""
ComponentProcessor="MoCoolKaErp.Components.DefaultComponentProcessor,MoCoolKaErp"
BusinessProcessor="MoCoolKaErp.MKBusinessProcessors.DefaultBusinessProcessor,MoCoolKaErp" />
</Module>
<Module Name="ErpCore" Remark="核心模块">
<Action Id="100101" Remark="代码类别" MKEntity="MoCoolKaCoreErp.Model.Code.MKCodeClassEO,MoCoolKaCoreErp"/>
<Action Id="100102" Remark="代码" MKEntity="MoCoolKaCoreErp.Model.Code.MKCodeEO,MoCoolKaCoreErp"/>
<Action Id="100203" Remark="权限代码" MKEntity="MoCoolKaCoreErp.Model.Access.MKConfigEO,MoCoolKaCoreErp"/>
<Action Id="100202" Remark="角色" MKEntity="MoCoolKaCoreErp.Model.Access.MKRoleEO,MoCoolKaCoreErp"/>
<Action Id="100201" Remark="用户" MKEntity="MoCoolKaCoreErp.Model.Access.MKUserEO,MoCoolKaCoreErp"/>
</Module>
</Modules>[/size]
设计原则:模型驱动、配置驱动、动作驱动、逻辑分离、易扩展
目标:
1)支持多种服务平台
2)支持复杂业务
3)在业务变动时代码改动量小
4)支持模块热升级
5)提供ERP需要的组件
6)提供详尽的日志,跟踪错误、调试性能
7)严格规定什么样的逻辑写在哪个部怎样写业务逻辑,避免逻辑混乱和重复。详见《怎样用MoCoolKaErp编写业务逻辑》
[size=x-small][/size][size=small][/size]
运行时分为ERP协议和参数两部分
ERP协议规定了Server逻辑处理过程
序列调用如下,7个接口,可以根据需要进行实现
客户端->MKService->ServiceAdapter->MKVerifyAccess->ComponentProcessor->BusinessProcessor->Handler->DataStroageProvider->数据库
MKService 服务 对外提供的服务,比如WCF,负责接收客户端的数据,建立服务适配器
ServiceAdapter 服务适配器,取得服务上下文和SESSION上下文,组织生标准数据格式向后传递
MKVerifyAccess 权限校验,校验是否有权限操作,通过向后传递。从本次开始进入到业务逻辑,前面是组织数据
ComponentProcessor 组件处理,与ERP提供的各种组件交互,比如及时消息,工作流引擎,数据转换服务等。在本层启动数据库事务,负责事务的提交和回滚
BusinessProcessor 业务处理 ,处理模块间的交互。
Handler 逻辑处理 ,指模块内部的逻辑
DataStroageProvider 数据访问层,提供对库的支持
参数在协议中上下文中传递
传递三个参数
MKEntity:实体 由客户端提交。
ServerRuntimeContext 服务上下文,保存服务器的信息。主要提供协议的调度功能
SessionContext session上下文,保存每个连接信息,主要提供事务功能
其它主要类
DefaultServer 缺省服务。根据配置加载组件、模块。最先启动的类。
MKModule 模块。模型驱动的核心。在协议中属于模块的有MKVerifyAccess->ComponentProcessor->BusinessProcessor->Handler。数据的有MKEntity和AccessRule
MKComponent 组件。外挂在ERP中,不影响主要的业务逻辑的部分。组件常常可以独立工作,比如及时消息,工作流引擎,数据转换服务等
AccessRule 访问规则。处理实体的字段级访问控制、按钮级访问控制,简单规则(必填、长度等)
动作驱动:与客户端交互每个动作有唯一号码,通过唯一号码服务端各个模块可以协调工作。
动作号码由12位数字组成 3位产品号 +3位模块号+3位保留位+3位动作号组成
其中动作号规定如下:
101:查询
102:增加弹出
103:修改弹出
104:查看
105:删除
106:关闭
112:增加提交
113:修改提交
产品号100由核心模块使用
配置驱动:配置可能存在xml文件也可以存储在数据库
下面是模块加载的例子
<?xml version="1.0" encoding="utf-8" ?>
<Modules>
<Module Name="ErpDefault" Remark="缺省模块">
<Action Id="000000" MKEntity=""
Handler="MoCoolKaErp.Handlers.CoreHandler,MoCoolKaErp" AccessRule="" MKVerifyAccess=""
ComponentProcessor="MoCoolKaErp.Components.DefaultComponentProcessor,MoCoolKaErp"
BusinessProcessor="MoCoolKaErp.MKBusinessProcessors.DefaultBusinessProcessor,MoCoolKaErp" />
</Module>
<Module Name="ErpCore" Remark="核心模块">
<Action Id="100101" Remark="代码类别" MKEntity="MoCoolKaCoreErp.Model.Code.MKCodeClassEO,MoCoolKaCoreErp"/>
<Action Id="100102" Remark="代码" MKEntity="MoCoolKaCoreErp.Model.Code.MKCodeEO,MoCoolKaCoreErp"/>
<Action Id="100203" Remark="权限代码" MKEntity="MoCoolKaCoreErp.Model.Access.MKConfigEO,MoCoolKaCoreErp"/>
<Action Id="100202" Remark="角色" MKEntity="MoCoolKaCoreErp.Model.Access.MKRoleEO,MoCoolKaCoreErp"/>
<Action Id="100201" Remark="用户" MKEntity="MoCoolKaCoreErp.Model.Access.MKUserEO,MoCoolKaCoreErp"/>
</Module>
</Modules>[/size]