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轻量级开源框架 入门篇: 实体类

时间: 2024-10-18 04:10:26

Farseer.net轻量级开源框架 入门篇:逻辑层的选择的相关文章

Farseer.net轻量级开源框架 入门篇:分类逻辑层

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 缓存逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 添加数据详解 分类逻辑层 分类逻辑层,主要用在一些需要支持无限递归的树数据.树数据是:必须有一个根节点,根节点有无限个子节点,没有节点限制.比如我们常用的有:(频道.xxx分类) 这里与BaseCacheModel的操作是完全一致.唯一不同的是,BaseCateModel是继承自ModelCateInfo.这个类

Farseer.net轻量级开源框架 入门篇:添加数据详解

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 分类逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 修改数据详解 前面讲的大多数是原理及说明,大家在理解上会比较枯燥,接下来的几篇,倾向于实战,会比较有意思些. 这里的话,还是拿Users实体类来讲解在我们框架的几种添加方式. Insert的几种方式 1 Users info = new Users(); 2 info.UserName = "张三";

Farseer.net轻量级开源框架 入门篇:使用前说明

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 框架性能测试 下一篇:Farseer.net轻量级开源框架 入门篇: 增.删.改.查操作演示 本篇讲解使用或者学习Farseer前需要知道一些事项: 在后续很多演示中,使用了很多扩展方法.但作者并没有明确出哪些是扩展的方法.所以读者要注意.在使用框架的时候,都需要引用扩展方法的命名空间:using FS.Extend; 为了方便,扩展方法统一放到FS.Extend中,在这里特别说

Farseer.net轻量级开源框架 入门篇:Where条件的终极使用

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 查询数据详解 下一篇:Farseer.net轻量级开源框架 中级篇: 事务的使用 这里,我把一些常用Where用到的条件都写在这里,方便大家学习 1 // 这是最常用的 属性判断 2 Users.Data.Where(o => o.ID == 1) 3 Users.Data.Where(o => o.ID > 1) 4 Users.Data.Where(o => o

Farseer.net轻量级开源框架 入门篇:删除数据详解

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 修改数据详解 下一篇:Farseer.net轻量级开源框架 入门篇: 查询数据详解 相对于修改,删除则简单的多: 1 // 字段值指定 加 1 2 Users.Data.Where(o => o.ID == 1).Delete(); 1 Users.Data.Delete(1); 1 var lst = new List<int> { 1, 2, 3, 4, 5 }; 2

Farseer.net轻量级开源框架 入门篇:查询数据详解

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 删除数据详解 查询列表的几种方式 1 // 字段值指定 加 1 2 Users.Data.Where(o => o.ID == 1).ToList(); 1 // 查询前10条数据 2 Users.Data.ToList(10); 1 // 批量查询 2 var lst = new List<int> { 1, 2, 3, 4, 5 }; 3 Users.Data.ToL

Farseer.net轻量级开源框架 入门篇:修改数据详解

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 添加数据详解 下一篇:Farseer.net轻量级开源框架 入门篇: 删除数据详解 Update的几种方式(基本) 1 Users info = new Users(); 2 info.UserName = "张三"; 3 info.PassWord = "密码"; 4 5 // 指定用户ID为1的的数据进行修改. 6 Users.Data.Wher

Farseer.net轻量级开源框架 入门篇:事务的使用中级篇

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 查询数据详解 下一篇:Farseer.net轻量级开源框架 中级篇: 执行SQL语句 DbExecutor 的使用 使用事务,我们需要用到一个类:DbExecutor 它的命名空间在:FS.Core.Data 中,我们先看下它的参数: 1 /// <summary> 2 /// 构造函数 3 /// </summary> 4 /// <param name=&

Farseer.net轻量级开源框架 中级篇:动态数据库访问

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 自定义配置文件 下一篇:Farseer.net轻量级开源框架 中级篇: 数据库切换 说到动态数据库的访问,不得不说的是,我们的实体类,是如何找到数据库配置并访问的呢? 回顾下我们的Users类: 1 [DB(Name = "Members_User")] 2 public class Users : BaseModel<Users>; 这里有个DB的特性,其