架构之旅~底层提供一个统一的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()我们在业务层不用去管数据有效性
这方法的基础过滤工作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示