在我们开始项目过程中,项目中通常会存在几个主要的对象,如你在设计“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()我们在业务层不用去管数据有效性

这方法的基础过滤工作。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:架构之旅~底层提供一个统一的GetModel()的重要性,如需转载请自行联系原博主。

架构之旅~底层提供一个统一的GetModel()的重要性相关推荐

  1. 微服务架构讲解:那叫一个通俗易懂

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 目录如下: 一.微服务架构介绍 二.出现和发展 三.传统开发模式和微服务的区别 四.微服务的具体特征 五.SOA和微服务的区别 六.如何具体 ...

  2. Service-Oriented Architecture:面向服务的架构(SOA)是一个组件模型

    面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台. ...

  3. 新浪、万网前系统架构师高俊峰:统一监控报警平台架构设计思路

    谈到运维,监控应该是运维的重中之重.怎么说呢?有很多人说这个监控应该是运维的第三只眼睛,一个好的监控平台对我们这个工作本身来说,应该有很大的帮助.那么,如何要构建一个完善的监控平台.那就是我们今天要讨 ...

  4. 如何为我们的应用程序提供一个更小、更快的视频通话库

    正文字数:2848  阅读时长:4分钟 在研究如何使视频通话在未来更高效,更易于扩展时,Facebook意识到,最好的方法是从头开始重新设计库并重写整个库,也就是Rsys. 作者 / Ishan Kh ...

  5. 架构进化的本质——用一个例子讲清楚

    按语:架构是系统的基因.骨架,真如生命体一样,架构也在不断的适应环境.达尔文的进化论,是系统架构演进的基本原理.业务与技术的进化是相辅相成的. 1.前言 去网上搜一下架构这个词,会出现很多文章,然鹅看 ...

  6. 《梦幻西游》手游主程刘强:如何提供一个稳定高效的MMO手游服务器引擎

    原标题:原创 <梦幻西游>手游主程刘强:如何提供一个稳定高效的MMO手游服务器引擎 整理/手游那点事子安 随着手游越发端游化和重度化,衡量一款手游的数据除了传统的留存率.ARPU等外,还新 ...

  7. Javascript MVC架构之旅

    为什么80%的码农都做不了架构师?>>>    日期:2012-9-10  来源:GBin1.com 本文摘自smashingmagazine的Journey Through The ...

  8. 11,外观模式(Facade Pattern)是为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。...

    Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种.Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面.这个一致的简单的界面被称作facade. ...

  9. iphone系统架构以及各层提供的主要服务

    iPhone OS的技术实现包括四层:核心OS(Core OS)层.核心服务(Core Service)层.媒体(Media)层和Cocoa Touch层.系统低层为所有应用提供基础服务,其他较高层包 ...

最新文章

  1. 从“诺奖级”成果到“非主观造假”,时隔6年,韩春雨带着原一作,再发高分文章!...
  2. 超图单值专题图 - 行政区划类型学习
  3. 深度学习核心技术精讲100篇(三十六)-EdgeRec:边缘计算在淘宝推荐系统中的大规模应用
  4. 【Linux】一步一步学Linux——nl命令(43)
  5. C++类模板实例化条件
  6. [转]UE/UI/UCE/UED的区别 附UED团队网站链接
  7. HTML5对比HTML4带来的新变化
  8. python基础0304
  9. ecmall挂件开发实例二(转)
  10. 计算机云平台架构,基于虚拟化技术的云计算平台架构研究
  11. win10企业版激活简便方法
  12. 光谱分辨率单位_遥感图像的空间分辨率,光谱分辨率,辐射分辨率,时间分辨率...
  13. 新浪微博开放平台PHP 类 WeiboClient 说明
  14. 尚学堂第十一章多线程习题答案
  15. 子组件改变父组件的两种方式
  16. Opencv(C++)系列学习---opencv_contrib安装
  17. 16进制字符串转字节
  18. 【产品】《用户体验要素》框架层(界面设计、导航设计和信息设计)
  19. 如何在微信公众号上传PDF文件?
  20. php反序列化失败,php 反序列化报错及解决

热门文章

  1. Java中线程的创建有两种方式
  2. linux之grep使用技巧
  3. JAVA的对象访问定位
  4. HBase内置过滤器java api的总结
  5. sort 、sorted、range、join方法 数字的正序、倒叙、翻转
  6. 开发了一款chrome扩展程序
  7. HTTP协议状态码详解(HTTP Status Code)(转)
  8. Oracle闪回技术(Flashback)
  9. windows加域后的问题
  10. 1014. 最佳观光组合