我一直在使用Rails超过4年,所以很明显,我喜欢Rails和喜欢做的事情Rails的方式,有时我在不知不觉中下降到黑暗的一面。我们是否将Rails ActiveRecord用作混合结构,即数据结构+对象?
我最近Bob大叔拿起清洁守则。我在第6章,对于我们作为Rails开发者是否打破了OO设计的基本规则,即Demeter Law还是封装,有点困惑?德米特定律指出一个对象不应该知道另一个对象的内部,它不应该在方法返回的对象上调用方法,因为当你这样做时,它表明一个对象知道太多关于另一个对象的方法。
但很多时候,我们呼吁从模型的另一个对象的方法。例如,当我们有一个像'一个订单属于一个用户'的关系。然后,我们经常结束做order.user.name或者为了防止它看起来像列车残骸,我们建立了一个委托来执行order.name。
这不就像打破德米特法或封装?
的另一个问题是:是的ActiveRecord只是一个数据结构或数据传输对象与数据库的接口?
如果是的话,那么就不要我们创建了一个混合结构,即半目标和半结构数据通过把我们的业务规则中的ActiveRecord模型?
永远不要把书看得太重。当然除了“代码完成”。 – vava 2009-12-28 08:46:14
这样的“规则”和“法律”只是使代码变得干净的建议。当它更加干净时,就去做吧。 – luikore 2009-12-28 09:21:00
我可以肯定地故意违反规则,如果我知道这违反不会导致长期的设计问题,尤其是如果有一种方法可以实现更清晰的代码没有违反任何规则,那么这将是最好的路径: ) – nas 2009-12-28 09:30:25