小编nas*_*nas的帖子

我们使用Rails ActiveRecord作为混合结构,即数据结构+对象吗?

我已经使用Rails超过4年了,所以很明显我喜欢Rails并喜欢Rails Way的做法,有时我会在不知不觉中陷入黑暗的一面.

我最近选择了鲍勃叔叔的清洁代码.我在第6章,有点困惑我们是否作为铁轨开发人员打破了OO设计的基本规则,即Demeter法则或封装?Demeter法则指出一个对象不应该知道另一个对象的内部,它不应该调用方法返回的对象上的方法,因为当你这样做时,它会建议一个对象对另一个对象有太多的了解.

但是我们经常从模型中调用另一个对象的方法.例如,当我们有一个像'一个订单属于一个用户'的关系时.然后我们经常最后做order.user.name或者为了防止它看起来像火车残骸,我们设置了一个委托来做order.name.

  1. 这还不像打破得墨忒耳法或封装法吗?

  2. 另一个问题是:ActiveRecord只是一个与数据库接口的数据结构或数据传输对象吗?

  3. 如果是,那么我们不是通过将我们的业务规则放在ActiveRecord模型中来创建混合结构,即半对象和半数据结构吗?

ruby oop activerecord ruby-on-rails

7
推荐指数
2
解决办法
1331
查看次数

一种优雅的红宝石分配方式

有没有更优雅的方式在ruby中执行此逻辑

a = nil #=> obviously 'a' can have value but I am just setting it nil to make the eg more clear
b = a
unless b
  b = "value"
end
Run Code Online (Sandbox Code Playgroud)

这样我们最终得到b的值.我们可以像上面那样使用上述代码的另一种变体

a = nil
b = a
b ||= "value"
Run Code Online (Sandbox Code Playgroud)

我也可以使用三元语句来编写上面的代码

b = a ? a : "value"
Run Code Online (Sandbox Code Playgroud)

但如果你用一长串代码替换变量a和"value",那么这个三元语句也将开始看起来很难看.

上述逻辑可以以某种方式变得更优雅/更具表现力,还是仅限于上述解决方案?

ruby

0
推荐指数
1
解决办法
171
查看次数

标签 统计

ruby ×2

activerecord ×1

oop ×1

ruby-on-rails ×1