zoukankan      html  css  js  c++  java
  • Farseer.net轻量级开源框架 入门篇:逻辑层的选择

    导航

    目   录:Farseer.net轻量级开源框架 目录

    上一篇:Farseer.net轻量级开源框架 入门篇: 入门篇:增、删、改、查操作演示

    下一篇:Farseer.net轻量级开源框架 入门篇: 实体类

    当我们创建了一个实体类后,就需要继承其中一个基类:BaseModel、BaseCacheModel、BaseCateModel。只有继承了这三个基类的其中一个时,框架才能对实体建立数据库关系映射(也就是ORM)。并且实现了对数据库的CURD的操作。

    本框架与其它一些框架不同之处在于,对于Insert、Update、Delete、ToList、ToInfo 等一系列操作不需要通过“生成工具”去生成这些方法。因为我们利用了.net伟大的泛型进行了封装。

    BaseModel:普通逻辑层
    public class Users : BaseModel<Users>{ }

    继承了BaseModel之后,会继承以下几个属性

     1         /// <summary>
     2         ///     查询结果
     3         /// </summary>
     4         public static DataResult<TInfo> DataResult { get; set; }
     5 
     6         /// <summary>
     7         ///     数据库持久化
     8         /// </summary>
     9         public static Bean<TInfo> Data
    10         {
    11             get
    12             {
    13                 var bean = new Bean<TInfo>();
    14                 DataResult = bean.DataResult;
    15                 return bean;
    16             }
    17         }
    18 
    19         /// <summary>
    20         ///     数据库持久化
    21         /// </summary>
    22         public static CacheDataBean<TInfo> Cache
    23         {
    24             get
    25             {
    26                 var bean = new CacheDataBean<TInfo>();
    27                 DataResult = bean.DataResult;
    28                 return bean;
    29             }
    30         }

     Users.DataResult:返回执行数据库的查询情况,如执行时间、执行的SQL语句情况。

    Users.Data:则是对数据库的的CURD操作。(在BaseModel中,所有的增删改查的操作都在这里)  它返回的是一个Bean<User>的对象。 在这个对象中。则可以对数据库进行CURD的任意操作。

    Users.Cache:缓存操作。该缓存与缓存逻辑层的原理是不一样的,目的也是不一样的。(具体说明在普通逻辑层中:点这里)在这里只需要知道,它是根据执行的SQL,进行命中缓存。

    BaseCacheModel:缓存逻辑层
    public class Users : BaseCacheModel<Users>{ }

    继承了BaseCacheModel之后,会继承以下几个属性

     1         /// <summary>
     2         ///     查询结果
     3         /// </summary>
     4         public static DataResult<TInfo> DataResult { get; set; }
     5 
     6         /// <summary>
     7         ///     数据库持久化
     8         /// </summary>
     9         public static CacheBean<TInfo> Data
    10         {
    11             get
    12             {
    13                 var bean = new CacheBean<TInfo>();
    14                 DataResult = bean.DataResult;
    15                 return bean;
    16             }
    17         }
    18 
    19         /// <summary>
    20         ///     数据缓存操作
    21         /// </summary>
    22         /// <param name="db">事务</param>
    23         public static List<TInfo> Cache(DbExecutor db = null)
    24         {
    25             return Data.ToList(db);
    26         }

     缓存逻辑层,是把整张表的数据一次性缓存起来,不设有任何的条件。一旦与该表产生操作,会先判断是否已缓存到本地。

    特殊说明的是,当对这个表的数据进行操作时(说的是Data属性的操作。)会同时更新本地缓存、数据库数据,可以简单理解为“同步”更新。

    这里的Users.Cache() 是方法。而普通逻辑层是属性。注意区别。(目的是事务)这里返回的对象就是List<Users>,后续的操作不用我教了吧。就是本地的变量查询了。

    这里的Users.Data 所返回的对象发生变化了。是:CacheBean<TInfo>。这里只包括对数据库的更新操作:新增、删除、修改。而查询操作在Users.Cache()中。

    BaseCateModel:分类逻辑层(带缓存)
    public class Users : BaseCateModel<Users>{ }

    继承了BaseCateModel之后,会继承以下几个属性

     1         /// <summary>
     2         ///     查询结果
     3         /// </summary>
     4         public static DataResult<TInfo> DataResult { get; set; }
     5 
     6         /// <summary>
     7         ///     数据库持久化
     8         /// </summary>
     9         public static CacheBean<TInfo> Data
    10         {
    11             get
    12             {
    13                 var bean = new CacheBean<TInfo>();
    14                 DataResult = bean.DataResult;
    15                 return bean;
    16             }
    17         }
    18 
    19         /// <summary>
    20         ///     数据缓存操作
    21         /// </summary>
    22         /// <param name="db">事务</param>
    23         public static List<TInfo> Cache(DbExecutor db = null)
    24         {
    25             return Data.ToList(db);
    26         }

     分类逻辑层,主要用在一些需要支持无限递归的树数据。树数据是:必须有一个根节点,根节点有无限个子节点,没有节点限制。比如我们常用的有:(频道、xxx分类)

    这里与BaseCacheModel的操作是完全一致。唯一不同的是,BaseCateModel是继承自ModelCateInfo。这个类提供了默认的几个字段:

     1     /// <summary>
     2     /// 分类基类
     3     /// </summary>
     4     public class ModelCateInfo : ModelInfo
     5     {
     6         /// <summary>
     7         ///     所属ID
     8         /// </summary>
     9         [Display(Name = "所属分类")]
    10         public virtual int? ParentID { get; set; }
    11 
    12         /// <summary>
    13         ///     标题
    14         /// </summary>
    15         [Display(Name = "标题"), StringLength(50), Required]
    16         public virtual string Caption { get; set; }
    17 
    18         /// <summary>
    19         ///     排序
    20         /// </summary>
    21         [Display(Name = "排序")]
    22         public virtual int? Sort { get; set; }
    23     }

    并且,要配合扩展方法进行更多的操作。(扩展方法的命名空间:using FS.Extend)

    扩展方法提供了一系列上下级节点的搜索方法。比如查询父级、顶级、下级等等操作。当然里面的方法有很多。具体大家在:FS.Extend.ListExtend 类中查看。

    总结

    三个逻辑层就简单的介绍这里,相信大家可以在使用实体类时,知道如何选择使用哪个逻辑层了。

    数据量大、且更新频率高的,建议只使用BaseModel 即 普通逻辑层

    数据量小、更新频率少的,建议使用BaseCacheModel 即缓存逻辑层

    数据量小、更新频率少、需要递归的树节点类型的数据的,建议使用BaseCateModel 即缓存逻辑层

    导航

    目   录:Farseer.net轻量级开源框架 目录

    上一篇:Farseer.net轻量级开源框架 入门篇: 入门篇:增、删、改、查操作演示

    下一篇:Farseer.net轻量级开源框架 入门篇: 实体类

    广告时间

    QQ群:116228666 (Farseer.net开源框架交流) 请注明:Farseer.Net

    Farseer.Net是一款ORM框架 + 常用工具 + 扩展集合。

    Farseer 意为:先知、预言家 通常在某些场合时,提供计谋、策略。也希望该框架能给大家提供最大化的便捷。

    ORM:其英文全称是:Object(对象) Relational(关系) Mapping(映射)

    Farseer.Net的目标是:快速上手、快速开发、简单方便。

    1 new User { ID = 1, Name = "张三" }.Insert()
  • 相关阅读:
    LinuxIP乱码
    APP前置代码脚本等基础操作及安装python库
    XP定位(APP元素定位)
    关联函数应用
    命令查看当前运行APP的包名和Activity
    android智能手机如何查看APK包名
    接口代码(requests库安装)
    python不能运行
    语音接口参数转换
    接口图片参数化
  • 原文地址:https://www.cnblogs.com/steden/p/4075743.html
Copyright © 2011-2022 走看看