Rails 何为 DCI and Rails ?

tumayun · 发布于 2012年05月24日 · 最后由 tumayun 回复于 2012年05月25日 · 2701 次阅读
967

如题,希望了解 DCI and Rails 的同学介绍下。 我的理解就是在model层再抽象出一层,专门放一类代码,比如抽象出业务代码等

呼叫:@hysios @huacnlee @ywencn @lgn21st @Rei @hisea

共收到 9 条回复
967

没人了解么?

967

发现我理解错了,DCI应该是根据上下文动态的注入方法 比如权限管理中,user的权限可能是N种中的一种或者几种 然后把各个权限的方法抽象到另外一个moduleuser根据所属权限,给user对象注入该权限的方法,如: user.extend(Admin) if user.is_admin?

但是我想不到除了权限管理功能,DCI还是用何种场景?

求各位大神现身说教。

270

@tumayun 什么场景你要用到 DCI 呢?

270

@tumayun 权限用 DCI 是大才小用了,可以简化一些复杂的组合计算吧,像销售系统的优惠活动场景

  1. 组合不同条件的优惠
  2. 选择不同类型的优惠等等吧 比较难讲清楚吧
De6df3

@tumayun 请不要这样在你的每个帖子 (另一个)里面追着 @ 一堆人,你的帖子不会被忽视的,大家都会看到,但你这样做法,会让人觉得有些讨厌... 早上其实我就很想说的了,可你有跑到另外个帖子去追。这样不好!

96

找到一段详细描述DCI的应用场景了 DCI aims at producing code where the interaction between objects at run time is visible in the code at compile time and in more general terms tries to make it easier to reason about the run time behavior from reading the code. http://stackoverflow.com/questions/9677916/what-is-dci-and-how-can-it-fit-with-rails DCI是一种paradigm,应用到Rails中可以解决fat model等MVC不足的地方,但这种在run time过程中动态扩展对象方法的操作在Rails中production环境下会有安全隐患,因为Rails中production环境下所有的类都会cache住的,具体使用还要看你的应用场景。 应用DCI的注意点和需要规避的问题可以参考: http://andrzejonsoftware.blogspot.jp/2011/02/dci-and-rails.html 还有一个代码实例,是DCI在纯ruby中实现迪杰斯特拉算法 http://fulloo.info/Examples/RubyExamples/Dijkstra/DijkstraListing.html 还记得以前用matlab实现过这个算法的,XD, 完全是函数式的编程,跟这差别太大了。

967

@huacnlee sorry 这样让你讨厌了,可能是我求知心切了,sorry @Richie @hysios 感谢闵兄 感谢大婶

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册