如题,希望了解 DCI and Rails 的同学介绍下。 我的理解就是在 model 层再抽象出一层,专门放一类代码,比如抽象出业务代码等
呼叫:@hysios @huacnlee @ywencn @lgn21st @Rei @hisea
没人了解么?
发现我理解错了,DCI应该是根据上下文动态的注入方法 比如权限管理中,user的权限可能是 N 种中的一种或者几种 然后把各个权限的方法抽象到另外一个module中 user根据所属权限,给user对象注入该权限的方法,如: user.extend(Admin) if user.is_admin?
DCI
user
module
user.extend(Admin) if user.is_admin?
但是我想不到除了权限管理功能,DCI 还是用何种场景?
求各位大神现身说教。
不知道 DCI 为何物的可以看看http://webidea.diandian.com/post/2011-12-22/12791635
可以看看这个例子 https://github.com/anachronistic/DCI-Rails-Example
@tumayun 什么场景你要用到 DCI 呢?
@tumayun 权限用 DCI 是大才小用了,可以简化一些复杂的组合计算吧,像销售系统的优惠活动场景
@tumayun 请不要这样在你的每个帖子 (另一个) 里面追着 @ 一堆人,你的帖子不会被忽视的,大家都会看到,但你这样做法,会让人觉得有些讨厌... 早上其实我就很想说的了,可你有跑到另外个帖子去追。这样不好!
找到一段详细描述 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, 完全是函数式的编程,跟这差别太大了。
@huacnlee sorry 这样让你讨厌了,可能是我求知心切了,sorry @Richie @hysios 感谢闵兄 感谢大婶