zoukankan      html  css  js  c++  java
  • OR层代码组织和映射介绍

        OR层也是老生常谈了,有的朋友说我是重复造车轮,只是OR这部分写的太早了,更主要是的与BLL层代码的集成,非常方便,所以呢,虽然后来NH和IB出来了我没有换,MS的Linq出来了,我依然没有换,经过这几年的应用,更坚定了自己的想法。

        与原来框架的主要差异是把数据映射由编码文件改为配置文件,当初考虑是方便写代码,用了之后才发觉这样太不灵活了,一直托到现在才改

        从结构上来说,与原来的框架没有太多的差异,主要是把配置由自定义属性改到了配置文件。另外加入了可配置的数据校验,在Column属性中加入了一个ReadOnly的属性,对于关联关系和关联表的处理会更方便。

    <Property PropertyName="Name" FieldName="name" Description="姓名">
      <Column TableName="User" ColumnName="Name" DbType="AnsiString" Length="50" ReadOnly=”true” />
    </Property>

         其中,ReadOnly默认值为false,当改为true时,如果更新数据库,此列则会跳过。加载的时候,可以根据实际需要配置成同步加载或是延迟加载。

         另外在Property属性内加入校验功能,支持大小/正则表达式/范围/时间等验证

         对于配置文件,默认放在Config/Map/目录下,规则为类的全名+.Config的文件:EES.H.Data.User.Config

         数据库的定义连接字符串,通过SourceKey进行设置。  <SourceKey>House</SourceKey>

         数据库的连接字符串配置在Config/DataSourceConfig.Config 的文件中:

    <DataSourceConfig DataSourceType="MSSqlServer" DataSourceKey="House">
      <ConnectionString>server=(local);database=House;Trusted_Connection=true;</ConnectionString>
    </DataSourceConfig>     

         在加载的时候,配置文件会自动被加载,系统不需要显式处理,这点与常见的NH和IB映射应该有一定的不同,并且系统会自动处理Session的打开和关闭,以及处理多数据源等,这些会以业务层代码里面再作介绍

     

        实体类如下:

        [EESData()]
        [Contract()]
        public class User : EESObject
        {

             protected String name;

    /// <summary>
    /// 姓名
    /// </summary>
    [Member(3)]
    public virtual String Name
    {
        get
        {
            return name;
        }
        set
        {
            if ((name != value))
            {
                this.OnPropertyChanging("Name");
                name = value;
                this.OnPropertyChanged("Name");
            }
        }
    }

       }

       对于实体类,大同小异,都是从EESObject继承而来

       EESData标注此类为数据类,另外也是为了通过工具生成界面层的视图。

       Contract标注此类可远程序列化,Member为属性的可序列化,如果没有此自定义属性,则此属性不会进行远程传输序列化。

       OnPropertyChanging和OnPropertyChanged在服务器端的作用不大,主要是对于客户端的双向绑定。

       从这几个属性,可以看的出来,数据映射类为标准的一般类,由于中间用到了AOP,所以如果要用到校验功能,则需要在属性前加 virtual 。

     

       对于级联的处理处理方式,采用一级对一级负责的处理方式,就如在部队里的处理一样。

       对于一对多和一对一的处理采用 关系配置处理。

       对于主从关系的处理,还需要手工添加Slave的自定义属性,在界面生成的时候,工具会自动生成主从关系的界面。还要在属性前增加 virtaul的属性,则系统会自动处理其层次关系,如果在客户端则会自动实现级联触发。

     

        映射层的介绍结束了,写的不到不明白的地方,请大家批评指正

  • 相关阅读:
    Prometheus对标签的处理
    Promethueus常用函数
    jenkins容器化docker-compose
    k8s常用命令
    k8s网络笔记
    动态更新已经存在配置
    prometheus远程写调优参数说明
    IndiaHacks 2016
    Codeforces Round #344 (Div. 2) Messager KMP的应用
    HDU1711 KMP的应用
  • 原文地址:https://www.cnblogs.com/dreamstec/p/1812577.html
Copyright © 2011-2022 走看看