Re: [pgsql-www] PostgreSQL.org Design Proposal - Mailing list pgsql-advocacy
From | Gavin M. Roy |
---|---|
Subject | Re: [pgsql-www] PostgreSQL.org Design Proposal |
Date | |
Msg-id | 4187B5C7.1050204@ehpg.net Whole thread Raw |
In response to | Re: [pgsql-www] PostgreSQL.org Design Proposal ("Joshua D. Drake" <jd@commandprompt.com>) |
Responses |
Re: [pgsql-www] PostgreSQL.org Design Proposal
|
List | pgsql-advocacy |
Joshua D. Drake wrote:
Gavin
Actually there were about 200 entries. I suggest you look at the whole list and not the top 50 list :p
BTW I don't know if anyone noticed but FrameWerk was a prizewinner with
the PHP 5 coding contest.. so go Gavin.
Yes, it has achieved a whopping 18th place (out of 50).
This is the form object which is for backend admin form generation. It generally has one purpose which is to make two column forms via objects. While I'm not the author of this set of objects, I'd be happy to implement suggestions. If you had to look that hard to find something like this, I'm pretty happy, since no one has given the project a critical review.I've downloaded Framewerk and gave it a quick review. There are some Bad Code Smells that will make it hard to manage in the long run:
1) HTML generated as PHP strings;
It is not necessary to use some "template engine" but code generating data structures for output should be separate from code outputting this data which can be e.g. HTML file with minimal PHP. Changing the design done in the following way is *extremely* difficult:
$ret .= "\n<form name='edit' action='$this->action' method='$this->method'>\n";
$ret .= "<blockquote><table class='form' width='98%' border='0'>\n";
foreach($this->fields as $field)
{
$ret .= " <tr valign='top'>\n";
$ret .= " <td class=\"formitem\"";
Yea I would have to agree with this one, but I am sure that Gavin appreciates the feedback.Absolutely.
I looked at some of the more popular i18n implementations, and decided that I could more easily implement an xml or pgsql table based implementation. It's super flexible, and allows for pretty elaborate conditionals. Perhaps you didn't look at the way the XML structure is set for the i18n tags? Here's the one for the one you pointed out:2) Usage of homegrown i18n solution rather than some established ones
Isn't it obvious from the first glance what this string does?
{!i18n:visitors:{@visitors}}
39 <key>Visitors</key> 40 <value> 41 <language>English</language> 42 <condition>$1 == 1</condition> 43 <translation>There is currently 1 site visitor.</translation> 44 </value> 45 <value> 46 <language>English</language> 47 <condition>$1 != 1</condition> 48 <translation>There are currently {@visitors} visitors.</translation> 49 </value> 50 </variable> The great thing about the system is the fact it's very modular. If this i18n system is sub-par, it would be very easy to implement the gnu system, for someone that wanted to deal with their files and create an interface for them. I originally did look at gettext but came to the conclusion it wasn't designed for a living set of translations but rather for a programmer and design team to do all the translations up front, which is ultimately why I did things the way I did them.
I designed the abstraction layer with PgSQL in mind, and with the idea that someone might want to come in and add support for something else. The way the abstraction layer works doesn't affect performance at all, and allows for some unique methods of querying data in blocks. It's very easy to code for, and allows for completely different query structures for different backends, while not having to jumble data around. There was a lot of thought of that went into how the abstraction layer would work, and while it is quite different than the way PHP normally handles queries, there is a reason for the two step approach, that I feel justified in creating.3) Abstraction of DB API rather than usage of proper data access layer
This is BTW the reason for poor PostgreSQL support in most PHP applications: their authors use such "abstraction layers", but design schema for MySQL and then just do minimal "translation" of queries they do. Upper levels should know nothing about SQL and just call lower level to fetch some data.
I've been making a concious effort to go back through and update 6 month old code to reflect how we're doing things now, and to enforce some standards on contributed code. If you'd like to help clean things up or make some constructive criticism, I'd love to hear it.4) Lack of consistent coding standards.
One can say many bad things about PEAR, but its code is at least readable and one always knows where to find things.
The product isn't even 1.0 yet and very few people are using it. If you are unhappy with it, why not donate some resources
and help make it a better product?
Gavin
pgsql-advocacy by date: