[Typo3-dev] DBAL - how to do it?

Michael Zedeler michael at zedeler.dk
Mon Feb 16 11:18:02 CET 2004


Kasper Skårhøj wrote:
>>Another thing: DBAL is being seen as the ability to switch databases 
>>seamlessly. I see that part as the *least* important feature. Security 
>>and better support for object persistence is by far the greatest benefits.
> 
> I don't know what object persistence is.

Roughly speaking, object persistence means that when we fetch data from 
the database, each row is encapsulated into an instance of a class. This 
means that we're suddently able to manipulate data from everywhere 
without worrying about how it is being stored.

In stead of

<?php
...
$query = "SELECT * FROM fe_users WHERE age > 12 AND age < 30";
$res = mysql(TYPO3_db,$query);
while($row = mysql_fetch_assoc($res))  {
	echo $row["name] . "<br>";
}
...
?>

I can go:

<?php
...
$person = new DataObjects_Person;
$person->whereAdd('age > 12');
$person->whereAdd('age < 30');
$person->find();

while ($person->fetch()) {
     echo $person->name. "<BR>";
}
...
?>

(The example above is from the PEAR manual.)

The variable $person is now a real object instance that can implement 
methods that would normally be hidden in a module - inaccessible to 
other modules. Examples of methods for a person object could be:

check_password($password, $format)

Check the password $password in format $format ("plaintext", "MD5" and 
so forth).

send_new_password()

Sends a new passsword to the person.

join_group($gid)

Joins group with uid $gid.

leave_group($gid)

Leaves group with uid $gid.

enable()/disable()

Enables/disables user account.

By doing this, it is much easier to reuse code provided by other 
extensions, since you don't have to worry about how the data is being 
stored. You simply fetch the object in question and call the method you 
need. Thats it. PEAR takes care to put the data back into the database 
for you.

Thats what I would call object oriented programming. What we have now is 
only object orinted on a fairly coarse-grained level where the full 
potential isn't realized.

PEAR provides everything neede to make fairly complex queries, but 
certain really exotic things won't be possible, though. Take a look at 
the PEAR introduction at

http://pear.php.net/manual/en/package.database.db-dataobject.intro-purpose.php

>>As I sketched in my previous post, the task is getting bigger as time 
>>goes by, so I think it would be a good idea to make a descision whether 
>>to do it or not. Since it is a fairly big change that needs many hands, 
>>it is important that everybody agrees to go for it.
> 
> It doesn't need many hands, it needs a clear head that does not make one single mistake in the process.

I agree in the case that DBAL is merely a subsystem that can switch 
databases. If that is what you see the DBAL as, then it is fairly easy 
to implement and also - not really worth the while. What I am aiming at 
is an abstraction layer that provides object persistence as above and 
security.

Again: I am willing to do some real coding if this is put on the agenda 
for an upcoming version.
--
velkommen til det muntre køkken!
Dagens ret: pasta med silde-banansovs.
Æblegrød med leverhejs til dessert.




More information about the TYPO3-dev mailing list