Ideally the database structure should have no bearing on the object model.
In many cases the two may be similar, but there are plenty of situations
where they aren't. My advice would be not to couple them unless you have a
good reason. Transfer creates objects that are fairly tied to the database
schema, so for many the tradeoff of having Transfer do a lot of work for you
is worth the coupling. Though you can get around some of that by using it's
Decorators.

One of the nice things about Hibernate is that it allows a lot of
flexibility in designing the object model because in most cases it can just
generate whatever database schema is needed to support the model.
Essentially, you just say "persist this" and you don't care how Hibernate
does it.

If you're looking to get something done quickly and want to use Transfer or
one of the other CF ORMs, then fine, but at the least I would say create
your model first, and then figure out what you need in terms of a schema to
allow that to work in Transfer or in your own DAOs and factories. But if
your goal is to learn more about OO design, I would stop thinking about the
database right now.



On Wed, Feb 18, 2009 at 8:29 PM, Henry <[email protected]> wrote:

>
> I'm not sure if this is a good question.  Please forgive me if this is
> one of the 'it depends' question without a use case.
>
>
> Imagine these relationships: 1 A has many B, and 1 B has many C...
>
> In reverse: C has 1 B, and B has 1A.  By transitivity, C has 1 A.
>
>
> in DB, we have:
>
> TableA
> a_id
>
> TableB
> b_id
> a_id (fk to TableA)
>
> TableC
> c_id
> b_id (fk to TableB)
>
>
> If a method in object C needs something from A to carry out the
> operations...
>
>
> solution 1.) the most obvious, but quite procedural way of doing OO:
>
> > getB().getA().someMethod()
>
> It works, but it doesn't smell right.  Some would say this is not OO,
> but procedural programming with CFCs.  Correct?
>
>
> solution 2.) let C have a reference to A, assigned by a setter or at
> Init()
>
> > variables.a.someMethod()
>
> It works, but... C does not really have a reference to A in the DB, so
> the DAO will be very different from DB, or is it considered okay?
>
>
> solution 3.) Maybe the problem is wrong?  move the method into A, and
> pass C in as argument
>
> <cfcomponent name="a">
>  function someMethod(C c) {
>
>    // do things in A
>
>    c.doSomething();
>  }
> </cfcomponent>
>
>
> Thanks,
> Henry Ho
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CFCDev" 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/cfcdev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to