• 信息系统开发平台OpenExpressApp - CSLA约定及框架约定


    CSLA相关

    CSLA类库约定

    1. 业务对象标识SerializableDataContract 属性,以便序列化。我一般使用Serializable
    2. 类库通用区域:对于不同的类型,CSLA提供不同的类库模板,如
      [Serializable]
      public class MyBusinessClass : Csla.baseclass<MyBusinessClass>
      {
      #region Business Methods
      #endregion
      #region Business and Validation Rules
      #endregion
      #region Authorization Rules
      #endregion
      #region Factory Methods
      #endregion
    3. 非public默认构造函数:所有业务对象实现非public构造函数,防止用户new一个业务对象,强制UI开发人员使用工厂方法来使用业务对象

    CSLA根对象方法调用约定

    1. DataPortal.Fetch<MyBUsinessClass>()调用到服务器端void DataPortal_Fetch()
    2. DataPortal.Fetch<MyBUsinessClass>(MyCriteria)调用到服务器端void DataPortal_Fetch(MyCriteria)
    3. DataPortal.Create<MyBUsinessClass>()调用到服务器端override void DataPortal_Create()
    4. DataPortal.Delete(MyCriteria)调用到服务器端 void DataPortal_Delete(MyCriteria)
    5. 更新对象调用服务器端 [Transactional(TransactionalTypes.TransactionScope)]   protected override void DataPortal_Update()
    6. 新增对象调用服务器端 [Transactional(TransactionalTypes.TransactionScope)]   protected override void DataPortal_Insert()
    7. 删除对象调用服务器端 [Transactional(TransactionalTypes.TransactionScope)]   protected override void DataPortal_DeleteSelf()     
    8. [RunLocal()]强制本地调用,如以下代码将在本地执行
      [RunLocal()]
      protected override void DataPortal_Create() {}
    9. 父对象调用FieldManager.UpdateChildren(空/MyParam)来更新子对象

    CSLA子对象方法调用约定

    1. DataPortal.FetchChild<MyBUsinessClass>()调用到本地void Child_Fetch()
    2. DataPortal.FetchChild<MyBUsinessClass>(MyCriteria)调用到本地void Fetch(MyCriteria)
    3. 生成对象调用本地 protected override void Child_Create()
    4. 父对象调用FieldManager.UpdateChildren(空/MyParam)来更新子对象
      1. 子对象调用 void Child_Update(空/MyParam) 来更新对象
      2. 子对象调用 void Child_Insert(BusinessBase parent) 来插入对象
      3. 子对象调用 void Child_DeleteSelf(BusinessBase parent) 来删除对象

      注意:本地指父对象代码执行所在的机器。

    框架相关

    代码生成模板

    1. 添加根对象(主表)使用模板【Lib\CodeGen\EditableRoot.cst】
    2. 添加子对象(细表)使用模板【Lib\CodeGen\EditableChild.cst】

    部署路径

    1. 模块部署在【Module】目录下
    2. 类库部署在【Library】目录下

    数据库约定

    1. 对象标识字段为Id,自关联外键字段为Pid
    2. 【Id】字段为Guid类型,名称为Id,建立表后修改此字段为【非聚合索引】
    3. 自关联外键为【PID】,其他表关联外键字段名为:【关联表名称+Id】
    4. 顺序号的字段为【OrderNo】,int类型,支持树形上下移动操作

    类库编写

    1. 属性名称首字母大写,多个词组成的每个词第一个字母大写。 如 Id/Pid/ProjectPbs。 变量首字母小写,如id/pid/projectPbs
    2. 类库关联Id和关联对象赋值时不处理其关联,如果逻辑关系,统一约定为添加方法处理。
    3. 根对象如果是单据样式模块,根对象需要实现【MergeOldObject】把点击列表后取得的对象合并到列表对象中,实现单据模块懒加载对象功能
    4. 子对象【懒加载】属性GetChild方法内部实现需要使用DataPortal.Fetch而不是DataPortal.FetchChild,否则代码将在客户端执行。如下示例:
      internal static BQSections GetChild(BQTrade parent) 
      {
         return DataPortal.Fetch<BQSections>(parent);
      }

    命名约定

    1. 列表名对象后缀为List/s, 系统会根据业务类型取数据GetList找对象名先找List,如果不存在再找s
    2. 添加细表记录方法名为NewChild  
    更多内容: 开源信息系统开发平台之OpenExpressApp框架.pdf
  • 相关阅读:
    python linecache模块 快速读取模块某行
    51单片机扩展protues仿真
    python 字符串过滤技巧 搜索目录
    51单片机(STC89C52RC)光电耦合控制继电器实验
    python 获取当前当前目录 脚本目录 被执行脚本目录
    51单片机(STC89C52RC)EEPROM操作实验
    Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
    Python __getattr__与__setattr__使用方法
    51单片机(STC89C52RC)看门狗设置
    jquery的Dtree树插件简单使用
  • 原文地址:https://www.cnblogs.com/zhoujg/p/1613753.html
Copyright © 2020-2023  润新知