• 架构之旅~底层提供一个统一的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()我们在业务层不用去管数据有效性

    这方法的基础过滤工作。

  • 相关阅读:
    Jmeter测试接口详细步骤(三)跨线程组传值-BeanShell 后置处理程序
    Jmeter测试接口详细步骤(二)HTTP Cookie管理器
    Jmeter测试接口详细步骤(一)基础操作
    最优化学习3
    最优化学习2
    最优化学习---从解方程到最优化1
    最优化学习---从解方程到最优化
    博客园 文章和随笔区别 (转
    refinedet tensorRT实现
    crnn pytorch 训练、测试
  • 原文地址:https://www.cnblogs.com/lori/p/2775450.html
Copyright © 2020-2023  润新知