Active Recordとデメテルの法則
ActiveRecordを使った次のようなコードを考えます。
wikipedia:Active_Record
PofEAA's Wiki - ActiveRecord
class Book < ActiveRecord::Base end class ShopAssistant def set_book_price(book_id, new_price) b = Book.find(book_id) b.price = new_price b.save # -- (1) end end
Book#findは指定されたIDのインスタンスを返すクラスメソッドです。
さて、ShopAssistant#set_book_price内でb.saveをやっているところ(1)は
- bはShopAssitant自身ではない
- bは引数で与えられたものではない
- bはShopAssistantが生成したものではない
- bはShopAssistantのインスタンス変数ではない
という点でデメテルの法則違反をしているような気がするんですが、どうなんでしょう?
wikipedia:デメテルの法則