Login | Register
My pages Projects Community openCollabNet

Reply to message

* = Required fields
* Subject
* Body
Send reply to
Author (directly in email)
Please type the letters in the image above.

Original message

Author Alan Pinstein <apinstein@mac.com>
Full name Alan Pinstein <apinstein@mac.com>
Date 2006-05-31 05:12:11 PDT
Message What the heck is a fluent interface? I have never heard of such a
thing... Have you got a link? Syntactically, this isn't even valid,
since FIRST_NAME is a class constant.

> $c->add(new EqualExpr(AuthorPeer​::FIRST_NAME()->l​ength(), 4));


On May 31, 2006, at 7:06 AM, Ants Aasma wrote:

> Hi,
> I looked at the examples you provided. The SqlExpr class seems a bit
> evil to me, as it leaks the database independence abstraction. I don't
> think it should be completely eliminated, but I do think its use
> should be heavily discouraged. Propel should provide a way to abstract
> the more frequently used expressions and provide a way to build plug
> in custom expressions so that the database dependent code goes into a
> well defined place. This will probably bring up the need for the
> criteria interface to be a bit more datatype aware.
> So the example
> $c = AuthorPeer::getCriteria();
> $c->add(new SqlExpr("char_length(name) = 4"));
> could be something like:
> $c->add(new EqualExpr(StringFiel​d::LengthExpr
> (AuthorPeer::FIRST_NAME), 4));
> or:
> $c->add(new EqualExpr(AuthorPeer​::FIRST_NAME()->l​ength(), 4));
> or going the fluent API way:
> $c->add(AuthorPe​er::FIRST_NAME()-​>length()->equals​(4));
> Even with the fluent API, the Criteria design can remain basically the
> same, only adding the convenience factory methods.
> By using this kind of SQL abstraction we could easily add commonly
> used abstract datatypes, such as timeperiod or money, and maybe even
> transparently support the Embedded Value (
> http://www.martinfow​ler.com/eaaCatalog/e​mbeddedValue.html ) pattern.
> This would shift propel a bit into the Data Mapper territory, but
> would make it a lot more suitable as a basis for a cleanly factored
> Domain Model.
> I still have to think a bit, how could we fit subqueries into the
> Criteria picture. It would be really sweet, if we could get something
> like this working:
> $c = HotelroomPeer::creat​eCriteria();
> $c->add( HotelroomPeer::RESER​VATIONS()->notAny​(
> ResevationPeer::TIME​PERIOD()->interse​cts( $conference->getTimeperiod()
> ) ) );
> $freeRooms = HotelroomPeer::doSelect( $c );
> The best part about the fluent interface would be that if we document
> everything appropriately IDE's will autocomplete all of this.
> Ants Aasma
> PS: Don't think that I'm ignoring you if I don't reply swiftly - I'm
> just having connectivity problems. The germans seem to have
> ridiculously expensive Wifi access. 30mins of wifi in my hotel costs
> the same as two beers from the minibar. Fortunately bundesdruckerei
> has hooked me up with free wiki at the conference center.
> --------------------​--------------------​--------------------​---------
> To unsubscribe, e-mail: dev-unsubscribe@prop​el.tigris.org
> For additional commands, e-mail: dev-help at propel dot tigris dot org