Hi,

Given the convention of fat models to handle business logic, is there
a point where you might be justified in using a separate plain ruby
object(s) to orchestrate certain business logic interactions,
essentially a middle layer between your controllers and models for
high level functions?

If you look at the InventoryTransaction model below you will see the
sort of methods I mean. In this case they are similar to factory
methods I suppose. However, I could end up with around 30+ different
method handling different kinds of inventory adjustments.

Most of these methods are non-trivial as the lookup and create other
models and then interact with them in achieving the desired business
function.

What are peoples experience with this? Leave them in the single model
or extract them to plain ruby classes (possibly within the models
folder) with a bunch of class methods to handle high level business
logic? This would also allow grouping methods of related functionality
in to separate classes.

Am I heading for future issues?

class InventoryTransaction < AR::Base

   has_many :inventory_account_entries
   validate :inventory_account_entries_balance

   def manually_add_inventory(product, location, quantity)
      ...create new transaction and suitable entries in to inventory
accounts
   end

   def manually_remove_inventory(product, location, quantity)
      ...create new transaction and suitable entries in to inventory
accounts
   end

   def report_shortage(product, location, quantity)
      ...create new transaction and suitable entries in to inventory
accounts
   end

   def report_surplus(product, location, quantity)
      ...create new transaction and suitable entries in to inventory
accounts
   end

   ... plus many more potential inventory interactions or events
resulting
   in movement between inventory accounts and the creation of
   a new InventoryTransaction record
end

Thanks, Andrew.

--

You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.


Reply via email to