我一直在使用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