架构之旅~底层提供一个统一的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()我们在业务层不用去管数据有效性
这方法的基础过滤工作。
本文转自博客园张占岭(仓储大叔)的博客,原文链接:架构之旅~底层提供一个统一的GetModel()的重要性,如需转载请自行联系原博主。
架构之旅~底层提供一个统一的GetModel()的重要性相关推荐
- 微服务架构讲解:那叫一个通俗易懂
点击上方 Java后端,选择 设为星标 优质文章,及时送达 目录如下: 一.微服务架构介绍 二.出现和发展 三.传统开发模式和微服务的区别 四.微服务的具体特征 五.SOA和微服务的区别 六.如何具体 ...
- Service-Oriented Architecture:面向服务的架构(SOA)是一个组件模型
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台. ...
- 新浪、万网前系统架构师高俊峰:统一监控报警平台架构设计思路
谈到运维,监控应该是运维的重中之重.怎么说呢?有很多人说这个监控应该是运维的第三只眼睛,一个好的监控平台对我们这个工作本身来说,应该有很大的帮助.那么,如何要构建一个完善的监控平台.那就是我们今天要讨 ...
- 如何为我们的应用程序提供一个更小、更快的视频通话库
正文字数:2848 阅读时长:4分钟 在研究如何使视频通话在未来更高效,更易于扩展时,Facebook意识到,最好的方法是从头开始重新设计库并重写整个库,也就是Rsys. 作者 / Ishan Kh ...
- 架构进化的本质——用一个例子讲清楚
按语:架构是系统的基因.骨架,真如生命体一样,架构也在不断的适应环境.达尔文的进化论,是系统架构演进的基本原理.业务与技术的进化是相辅相成的. 1.前言 去网上搜一下架构这个词,会出现很多文章,然鹅看 ...
- 《梦幻西游》手游主程刘强:如何提供一个稳定高效的MMO手游服务器引擎
原标题:原创 <梦幻西游>手游主程刘强:如何提供一个稳定高效的MMO手游服务器引擎 整理/手游那点事子安 随着手游越发端游化和重度化,衡量一款手游的数据除了传统的留存率.ARPU等外,还新 ...
- Javascript MVC架构之旅
为什么80%的码农都做不了架构师?>>> 日期:2012-9-10 来源:GBin1.com 本文摘自smashingmagazine的Journey Through The ...
- 11,外观模式(Facade Pattern)是为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。...
Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种.Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面.这个一致的简单的界面被称作facade. ...
- iphone系统架构以及各层提供的主要服务
iPhone OS的技术实现包括四层:核心OS(Core OS)层.核心服务(Core Service)层.媒体(Media)层和Cocoa Touch层.系统低层为所有应用提供基础服务,其他较高层包 ...
最新文章
- 从“诺奖级”成果到“非主观造假”,时隔6年,韩春雨带着原一作,再发高分文章!...
- 超图单值专题图 - 行政区划类型学习
- 深度学习核心技术精讲100篇(三十六)-EdgeRec:边缘计算在淘宝推荐系统中的大规模应用
- 【Linux】一步一步学Linux——nl命令(43)
- C++类模板实例化条件
- [转]UE/UI/UCE/UED的区别 附UED团队网站链接
- HTML5对比HTML4带来的新变化
- python基础0304
- ecmall挂件开发实例二(转)
- 计算机云平台架构,基于虚拟化技术的云计算平台架构研究
- win10企业版激活简便方法
- 光谱分辨率单位_遥感图像的空间分辨率,光谱分辨率,辐射分辨率,时间分辨率...
- 新浪微博开放平台PHP 类 WeiboClient 说明
- 尚学堂第十一章多线程习题答案
- 子组件改变父组件的两种方式
- Opencv(C++)系列学习---opencv_contrib安装
- 16进制字符串转字节
- 【产品】《用户体验要素》框架层(界面设计、导航设计和信息设计)
- 如何在微信公众号上传PDF文件?
- php反序列化失败,php 反序列化报错及解决