本文介绍从DDD(Domain-Driven Design[领域驱动设计])的角度来说说为什么要使用Entity Framework(以下都会简称为EF),同时也看出类似Drapper之类的简陋ORM不足的地方。
设想业务都是大家知晓的权限管理,实体类如下。
1 | public partial class User |
读到这里,请先思考一下,给一个 User
添加一个新的 Role
,你会怎么写代码?,然后再接下去看看DDD认为应该怎么写。
1 | //上面的User类,只是对数据库做简单映射的模型,在DDD思想中也称为 贫血模型 |
接下来,我们来看看怎么调用,可以看出一切都是围绕User这个领域模型的。
1 | var user = userService.GetUserById(userId); |
更加理想的DDD,是连userService都不要,但目前很难实现这种做法。1
2
3var user = User.Init(userId);
user.AddRole(role);
user.SaveChange()
理想很丰满,现实很骨感,除了技术不能完全实现DDD的思想,我们还要考虑性能问题,
所以目前的DDD的做法是推荐搜索功能,也就是说搜索出现的数据作展示用,不会再对搜索出来的数据进行增删改,那么就怎么快怎么来。你爱用Drapper也行,用EF+原生Sql也行,用Ado.Net也行。
不是说面向过程化的思想不行,能抓老鼠的就是好猫。
但前辈们的经验是,面对复杂的业务,用DDD的思想来解决会更好。
所以
今天你OOP,DDD了吗?^_^