本文介绍从DDD(Domain-Driven Design[领域驱动设计])的角度来说说为什么要使用Entity Framework(以下都会简称为EF),同时也看出类似Drapper之类的简陋ORM不足的地方。

设想业务都是大家知晓的权限管理,实体类如下。

读到这里,请先思考一下,给一个 User 添加一个新的 Role ,你会怎么写代码?,然后再接下去看看DDD认为应该怎么写。

接下来,我们来看看怎么调用,可以看出一切都是围绕User这个领域模型的。

var user = userService.GetUserById(userId);
user.AddRole(role);//可以看出用了领域模型后,代码更加OOP了~userService.Update(user);

更加理想的DDD,是连userService都不要,但目前很难实现这种做法。

var user = User.Init(userId);
user.AddRole(role);
user.SaveChange()

理想很丰满,现实很骨感,除了技术不能完全实现DDD的思想,我们还要考虑性能问题,
所以目前的DDD的做法是推荐搜索功能,也就是说搜索出现的数据作展示用,不会再对搜索出来的数据进行增删改,那么就怎么快怎么来。你爱用Drapper也行,用EF+原生Sql也行,用Ado.Net也行。

不是说面向过程化的思想不行,能抓老鼠的就是好猫。
但前辈们的经验是,面对复杂的业务,用DDD的思想来解决会更好。

所以
今天你OOP,DDD了吗?^_^

原文地址: https://www.cnblogs.com/weixb/p/9640089.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

为什么要使用Entity Framework相关推荐

  1. EF-Entity Framework 相关技术点收集贴

    不定期.偶尔.添加更新 在网络上看到或者自己开发过程中碰到的EF-Entity Framework相关技术点 本文地址:http://www.cnblogs.com/vnii/archive/2012 ...

  2. C#综合揭秘——Entity Framework 并发处理详解

    引言 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NET Entity Framework,.NET 都 ...

  3. 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想

    前言 借书正式出版之际,完整回顾下从写博客到写书整个历程,也算是对自己近三年在技术上的一个总结,整个历程可通过三个万万没想到来概括,请耐心阅读. 写博.写书完整历程回顾 从2013年12月注册博客园账 ...

  4. Entity Framework Code First在Oracle下的伪实现

    为什么要说是伪实现,因为还做不到类似MsSql中那样完全的功能.Oralce中的数据库还是要我们自己手动去创建的.这里,我们舍掉了Model First中的EDMX文件,自己在代码里面写模型与映射关系 ...

  5. Entity Framework:Code-First Tutorial开篇

    这个系列文章是关于Entity Framework Code-First的英文系列文章,内容不错,每篇一个主题知识点介绍,特转载过来 原文地址:http://www.entityframeworktu ...

  6. entity framework 使用Mysql配置文件

    2019独角兽企业重金招聘Python工程师标准>>> <?xml version="1.0" encoding="utf-8"?> ...

  7. Entity Framework CodeFirst数据迁移

    原文:Entity Framework CodeFirst数据迁移 前言 紧接着前面一篇博文Entity Framework CodeFirst尝试. 我们知道无论是"Database Fi ...

  8. 看看Entity Framework 4生成的复杂的分页SQL语句

    之前发现Entity Framework 4生成的COUNT查询语句问题,今天又发现它生成的分页SQL语句问题,而LINQ to SQL却不存在这个问题. >>> 来看一看,瞧一瞧! ...

  9. Entity Framework的启动速度优化

    最近开发的服务放到IIS上寄宿之后,遇到一些现象,比如刚部署之后,第一次启动很慢:程序放置一会儿,再次请求也会比较慢.比如第一个问题,可以解释为初次请求某一个服务的时候,需要把程序集加载到内存中可能比 ...

  10. 主攻ASP.NET.4.5 MVC4.0之重生:Entity Framework生成实体类步骤(十三)

    1.新建一个ASP.NET MVC 4.0 项目 2.安装Entity Framework Power Tools 3.Entity Framework- -RepositoryReverse Eng ...

最新文章

  1. 日本奥委会主席否认为争取奥运会主办权行贿
  2. 【推荐系统】深入理解推荐系统:无需人工特征工程的xDeepFM
  3. java读取ini_java 读取ini配置文件
  4. 【Linux系统编程学习】匿名管道pipe与有名管道fifo
  5. Python学习笔记之类(三)
  6. css transition过渡
  7. 比量iOS6/iOS7, 3.5inch/4.0inch
  8. 手机不用了,如何消除里面的数据和信息而又不被人可以恢复?
  9. java 递增 实现_Java编程实现递增排序链表的合并
  10. linux日志文件优缺点,Linux日志文件总结
  11. 小程序页面之间的跳转方法
  12. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---11
  13. python中home定义是什么_搞清楚Python中self的含义
  14. xp母盘制作流程+QQDLL修改和系统文件DLL修改(转)
  15. 软件技术专业-就业提示(一、实施工程师)
  16. c++ 字符串替换指定字符
  17. 【回归预测-ELM预测】基于遗传算法优化极限学习机实现风电数据回归预测附matlab代码
  18. mysql5.6 relay.info_Relay log 导致复制启动失败
  19. 使用 Notepad 或 TextEdit 来编写 HTML
  20. maximo跟java_maximo遇到的错误问题

热门文章

  1. python_getopt解析命令行输入参数的使用
  2. python 抓包基于pypcap
  3. 前端几个笔试题及答案(bd)
  4. [LeetCode]--20. Valid Parentheses
  5. 把nc v6的源码看懂
  6. 网管心得:优化网络性能给局域网提速[好文章]
  7. 如何实现线程池的 QueueUserWorkItem 方法的延续?
  8. 2021,我的输入输出
  9. 面试官:实现一个带值变更通知能力的Dictionary
  10. C#中Lock的秘密