首页 > GAME > 游戏 > 正文

株洲老焚窒商务服务有限公司,克孜勒苏秘帜食品有限公司,驻马店磊我科技有限公司

依赖反转原则DIP 与使用了Repository模式的asp.net core项目结构


DIP 依赖反转原则 Dependency Inversion Principle 的定义如下:

高级别的模块不应该依赖于低级别的模块, 他们都应该依赖于抽象.

假设Controller依赖于Repository的实例/实现, 而不是interface:

这个例子里面Controller是高级别模块, Repository是低级别模块.

但是根据定义: 高级别的模块不应该依赖于低级别的模块, 他们都应该依赖于抽象. 那么如何解决这个问题呢?

那就是 从Repository中提炼出一个interface, 叫做IRepository, 它就是个抽象:

这样一来, Controller依赖于IRepository, 所以高级别模块不依赖于低级别模块, 他们现在都依赖于抽象了.

那么这么做有什么好处? 为什么要使用DIP原则?

答案就是: 减少变化带来的影响.

看第一张图:

就从一个方面来说, 如果Repository被重新编译了, 那么Controller肯定需要重新编译, 也就是所有依赖于Repository的类都会被重新编译.

而使用DIP原则之后:

我们可以在Repository里面做出很多更改, 但是这些变化都不会影响到Controller, 因为Controller并不是依赖于这个实现.

只要IRepository这个interface或者叫Contract合约不发生变化, Controller就不会被影响到. 这也就可能会较少对整个项目的影响.

 

Interface 代表的是 "是什么样的", 而实现代表的是 "如何去实现".

Interface一旦完成后是很少改变的.

 

针对使用Repository+UnitOfWork模式的asp.net core的项目结构, 少许码友可能会有一点错误的理解, 可能会把asp.net core项目的结构这样划分:

这样一来, 其实就是这样的:

高级别的包/模块依赖于低级别的包/模块.

也就违反了DIP原则, 所以如果想按原则执行, 就需要引进一个新的模块:

把所有的抽象相关的类都放在Core里面.

这样就满足了DIP原则.

asp.net core的项目结构大致应该是这个思路:

由于Models是整个项目的核心内容, 所以也放在了Core里面.

当然也可以分成多个项目去实现DIP, 但是不一定按多个项目分开了就一定实现了DIP, 还是要看他们之间的依赖关系.

当前文章:http://mabebox.com/45918.html

发布时间:2019-03-22 08:44:45

孤独是我们一生中无可避免的命题 女人真正想要的是什么? NBA:终于等到你,还好我没放弃 塞卡病毒来袭,我们不可不防 女神来了 他是总统的朋友,首富的兄弟,为何却死得比乞丐还惨? 处男28,不找女友,是为啥 关于止咳药水成瘾和曲马多成瘾的性质 我们早已是故乡的异乡人 高考之后做什么?

宝宝皮肤过敏怎么办 吃点温暖 宝宝夏季常见传染病 陈忠实:60岁后回白鹿原,泪眼模糊 如果你够勇敢,此刻转个身,就能抱住你所爱的人 易经智慧 不弃旧也迎新 暑假高校游,为何如此火爆? 鸡汤比鸡肉更有营养吗? 男人和女人的六个思考差异 经典原创禅诗:【禅.十字回文诗】 为孩子去学心理学,必要么? 一篇文章看懂Android学习最佳路线 大过年的双方家长互相挑剔做儿女的夹在中间za办? 再次关注“被普通”的校园凶杀案的犯罪者 超常儿童的幼小衔接之路 环境磁场能量时时影响您的心情与运气 食物链底层的动物最终会进化成有毒的物种来防止被吃掉 能不能嫁这样的人?

编辑:乙密建北


声明:所发布的内容均来源于互联网,目的在于传递信息,但不代表本站赞同其观点及立场,版权归属原作者,如有侵权请联系删除。
他们为何恐惧至不顾生命:涉嫌吸毒者跳楼致死事件反思

懒是婚姻的致命伤

剩女会被家人催,被邻居议论吗