|class User < ActiveRecord::Base|
|#A number of methods giving this class too many responsibilities already|
|class Account < ActiveRecord::Base|
|# t.integer credits|
|#The question is, is there any way to avoid writing code of the form "user.account.add_credit", and thus violating the law of demeter.|
|# For example:|
|def bill_user(user, amount)|
|if user.account.available_credits > amount|
|#Charge user's credit card|
This comment has been minimized.
This comment has been minimized.Show comment Hide comment
Say that we have a user class (above) with the typical problem of having too many responsibilities. We are trying to introduce the concept of "prepaid credits" so that when we bill a user instead of charging their # card, we can deduct credits instead. We want to add some methods like "add_credit" and "available_credits". We want to avoid adding these methods to User.
One idea I had was to create an Account object (see above), and define the methods on that.
The question is, is there any way to avoid writing code of the form "user.account.add_credit", and thus violating the law of demeter.