zoukankan      html  css  js  c++  java
  • 架构之旅~底层提供一个统一的GetModel()的重要性

    在我们开始项目过程中,项目中通常会存在几个主要的对象,如你在设计“B2C”时,可能主要对象是“用户对象”,“产品对象”,“订单对象”,而这些对象的信息应该对我们来说是很重要的,当用户删除自己的产品时,我们可能不希望产品真的从数据库中被删除除,这时,我们在设计数据库时可能会把这几个对象所对应的表加上“状态”字段,即Status,它通常是int32类型的,而在程序中一般会对应一个枚举类型,你当然可以也叫它Status

    而今天要讲的GetModel()它只是本人封装的一个方法,它会在DATA层出现,为每个带个Status属性的对象实现一个GetModel()方法,而这个方法中我们会过滤一些统一的条件,如过滤掉被删除的对象,过滤掉登陆不活跃的对象等等,而这些操作通常具有统一性,即,它对前台所有业务都是一样的,也就是说:BLL(业务层)再进行查询组合时,不会直接从数据源中读取,而是从DATA层提供的GetModel()中去读取,这样的好处很容易理解,就是实现了调用上的“统一”,当我们要修改“过滤的条件”时候,只要修改DATA层的GetModel()方法即可。

    核心代码如下:

     1  public class UserRepository : TestRepositoryBase
     2     {
     3         /// <summary>
     4         /// 得到默认的结果集
     5         /// </summary>
     6         /// <returns></returns>
     7         public IQueryable<User> GetModel()
     8         {
     9             return _db.Set<User>()
    10                 .Where(i => i.Status != (int)Status.Deleted)
    11                 .OrderByDescending(i => i.ID);
    12         }
    13     }

    而在BLL层进行条件组合查询时,可以直接调用GetModel(),而不要自己在BLL层再使用以下的方法:

     1      /// <summary>
     2         /// 业务层得到完整的用户信息
     3         /// </summary>
     4         /// <returns></returns>
     5         public IQueryable<User> GetUser()
     6         {
     7             var linq = from data1 in _db.Set<User>().Where(i => i.Status != (int)Status.Deleted).OrderByDescending(i => i.ID)
     8                        join data2 in _db.Set<User_Profile>() on data1.ID equals data2.ID
     9                        select data1;
    10             return linq;
    11         }

    我想大家已经看到了上面方法的不足之处,当有第二个业务用到User对象时,你还要重要去组装你的条件,而使用GetModel()我们在业务层不用去管数据有效性

    这方法的基础过滤工作。

  • 相关阅读:
    【项目管理】WBS工作分解结构
    【代理篇】内网穿透利器——Termite
    【漏洞分析】Discuz! X系列全版本后台SQL注入漏洞
    【代理篇】内网穿透利器——EarthWorm
    【漏洞复现】Apache Solr远程代码执行(CVE-2019-0193)
    【漏洞复现】Apache Solr via Velocity template远程代码执行
    【漏洞复现】PHPStudy后门
    记一次织梦cms渗透测试
    Mybatis源码手记-从缓存体系看责任链派发模式与循环依赖企业级实践
    Dubbo源码手记-服务注册
  • 原文地址:https://www.cnblogs.com/lori/p/2775450.html
Copyright © 2011-2022 走看看