A good starting point is read Eric Evan's "Domain Driven Design", you
will probably learn a lot about how to organize big systems in any
language. The book is easy to read and has examples in Java.

-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/ (en)



On Wed, Feb 4, 2009 at 3:45 PM, Kim Shrier <k...@tinker.com> wrote:
>
> Hello Seb,
>
> An approach that I have used is to place the higher level business
> logic in model objects that do not inherit from ActiveRecord.  In
> the way I think about larger systems, the higher level business
> logic is still part of the model.  The model is not limited to
> managing the persistence of state.  I don't have a formal way of
> organizing these subsystem model objects as I haven't tackled any
> projects that sound as extensive as what you are working on.
>
> HTH
> Kim
>
> On Feb 4, 2009, at 11:28 AM, sbrocher wrote:
>
>>
>> Hi Julian,
>>
>> Thanks for your answer. I've seen Datamapper before. However, the way
>> I understand it, Datamapper is pretty much just a replacement for
>> ActiveRecord, so I don't see how it would add the extra layer of
>> abstraction I'm searching for... Did I miss something here?
>>
>> Thanks
>> Seb
>>
>> On Feb 3, 9:33 pm, Julian Leviston <jul...@coretech.net.au> wrote:
>>> Datamapper.
>>>
>>> Blog:http://random8.zenunit.com/
>>> Learn rails:http://sensei.zenunit.com/
>>>
>>> On 04/02/2009, at 1:59 PM, sbrocher <sbroc...@gmail.com> wrote:
>>>
>>>
>>>
>>>
>>>
>>>> Hi,
>>>
>>>> I've implemented a few big RoR apps. I do have some good experience
>>>> building large systems in many different languages and platforms
>>>> but I
>>>> don't consider myself a RoR guru, so I'd like you experts comment on
>>>> my thoughts.
>>>
>>>> I'd like to divide a large system (app) into several functional,
>>>> high-
>>>> level sub-systems. These are higher level than rails Models, and
>>>> provide APIs that implement business logic around functional groups.
>>>> Examples of these are billing manager, security manager (accounts,
>>>> privileges, roles, etc), inventory manager, manufacturing manager,
>>>> and
>>>> such (of course, these are just examples, but you get the point).
>>>
>>>> These high-level sub-systems may be implemented as servers (think
>>>> SOAP / REST / XML-RPC / ...), or just plain Ruby classes. Some of
>>>> these sub-systems implement integrations with other systems, for
>>>> example, a credit card gateway, an accounting system, Fedex, you
>>>> name
>>>> it. Some of the sub-systems may be just proxies to a system
>>>> implemented on some other technology.
>>>
>>>> The user interface (views) would not have access to any of the
>>>> Models.
>>>> They just present and / or grab data that is prepared for them /
>>>> pushed back to the controllers as local variables / arrays / hash
>>>> tables that don't reflect an actual Model.
>>>
>>>> The controllers do not have access to Models either. Instead, they
>>>> call methods from the high-level functional sub-system APIs.
>>>
>>>> The Models implement lower-level business logic related to how to
>>>> the
>>>> information is stored and retrieved from the database, the pertinent
>>>> validations, associations, etc. but do not implement high-level
>>>> business logic such as "how do I bill Joe for a specific event that
>>>> results in the combination of many other parameters and variables
>>>> that
>>>> at the end come from diverse fields on many different tables on the
>>>> underlying database structure".
>>>
>>>> The high-level sub-systems all share the same database and therefore
>>>> same data model and only communicate with each other via their APIs,
>>>> and can access all Models directly.
>>>
>>>> In other words, this would work more or less as a new layer in
>>>> between
>>>> the MVC pattern:
>>>
>>>> view <-> controller <-> high-level sub-system <-> models <->
>>>> database
>>>
>>>> The idea is to build the app in a more robust / less coupled way
>>>> where
>>>> I can exchange parts of the app by different technologies and other
>>>> applications in the future without having to recode a bunch of
>>>> things.
>>>> For example, the security subsystem could one day be replaced by an
>>>> AAA server and then the subsystem would be re-implemented to call
>>>> the
>>>> AAA server (to replace its own original implementation), however the
>>>> rest of the app would continue to use the same API calls to the
>>>> security subsystem and so the change is isolated from the rest of
>>>> the
>>>> app.
>>>
>>>> The problem with this is, I'd loose many of the RoR goodness, such
>>>> as
>>>> form helpers, easy models validation thrown back to the interface,
>>>> etc.
>>>
>>>> Am I missing some Ruby language construct or RoR framework construct
>>>> that would enable me to implement this kind of design on an easier
>>>> manner? Should I instead be thinking of many RoR applications
>>>> somehow
>>>> talking to each other?
>>>
>>>> I really like RoR but I'm starting to find myself on a tough
>>>> situation
>>>> dealing with evolving mid-to-large systems (think 50+ database
>>>> tables
>>>> and 8+ sub-systems). I need to come up with a pattern that would
>>>> force
>>>> me to implement and design code that works and is maintainable on a
>>>> long-term vision, however I'm not sure if this is because I don't
>>>> know
>>>> the 100% of what the language and framework has to offer, or if I am
>>>> just using it the wrong way (or both? :-).
>>>
>>>> Comments?
>>>
>>>> Thanks,
>>>> Seb- Hide quoted text -
>>>
>>> - Show quoted text -
>> >
>>
>
> --
>  Kim Shrier - principal, Shrier and Deihl - mailto:k...@tinker.com
> Remote Unix Network Admin, Security, Internet Software Development
>   Tinker Internet Services - Superior FreeBSD-based Web Hosting
>                      http://www.tinker.com/
>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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 rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to