# [EMAIL PROTECTED] / 2007-04-19 10:50:19 +0200:
> Roman Neuhauser wrote:
> >>> I wouldn't do it that way. A single class should not be a database
> >>> driver *and* manage connections.
> >> fair enough, although personally I find that going a bit far, I don't
> >> see the win in splitting up the 'driver' and 'connection manager'. not
> >> that this is the problem in this case.
> >
> > You wouldn't be having this upgrade problem if static DB::query(...)
> > wasn't there, and it's there because class DB is a client library *and*
> > a connection manager. So I'd say this design mistake (and the fact that
> > PHP allowed you to have almostatic methods) are the problem in this case.
> >
>
> I might plead with internals for: ;-)
>
> class DB {
> almostatic function query() { /*existence of $this is MY problem */ }
> }
Existence of $this is YOUR problem only as long as you don't share the
code with anybody else. At that moment, you have made life harder for
someone else.
> though I can't see atm how the connection management is the problem,
> I assume you think this because of the way connection ids and transaction ids
> in
> ibase are interchangable.
No, I've had virtually zero exposure to Interbase/Firebird, and have had
no idea about the phenomenon you mention. I think it's a problem
because of the ways it reduces quality of the code.
Or does DB not handle database connections? If not, how come the static
call DB::query("SELECT fubar FROM snafu") works? Guess it does things
besides querying (probably why it's a generic "DB" in the first place).
> regardless I have a problem, I'll keep looking at the code until a clean
> solution
> presents itself, it's in/out there somewhere.
>
> >> I could easily split out the actual connection management into a
> >> seperate object but I'd still be stuck with the problem described
> >> above (which is not actually related to connection management).
> >
> > Not if you make the separation visible to the client code, which, as you
>
> I don't follow you here. could you try an explain it in idiot language? :-P
Split the two functions, and don't try to hide the fact that they're two
functions; after all, if you do it correctly, the static one will
probably end in a different class.
> > write below, is actually only a fraction of those "10000's of lines of
> > code".
> >
> >>> Do those 10000's of lines of code concern you? rlynch says indirection
> >>> and separation of concerns are useless, you either have decent
> >>> programmers and global search & replace, or you don't.
> >> yes & no. I don't have an endless budget or legions of world-class
> >> analysts, designers and programmers at my disposal for building
> >> megabucks codebases that implement near-on perfect loosely-coupled
> >> application designs, and I don't have the same legion to do search and
> >> replace.
> >
> > I'm at a complete loss then. Richard, what would you advise to someone
> > in such a messy situation?
>
> my advice to myself is "find a way to fix it, and then do it" - not sure
> what exactly that means in terms of design or code but I figure that has to be
> an answer/solution somewhere :-)
Don't try to cram connection management into a db client driver class.
The rest will just fall out of it.
--
How many Vietnam vets does it take to screw in a light bulb?
You don't know, man. You don't KNOW.
Cause you weren't THERE. http://bash.org/?255991
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php