Inline response:

On 9/17/10 1:57 PM, Jonathan Bond-Caron wrote:
On Fri Sep 17 01:06 PM, Guilherme Blanco wrote:

Another good example is to map your persistence data into your
Entities. Doctrine 2 implements this and I think that way you can
compare easily with the PHP code alternative. I'd like to ask you to
compate the same Entity mapped through Annotations emulator and using
raw PHP code:
CmsUser using Annotations:
http://github.com/doctrine/doctrine2/blob/master/tests/Doctrine/Tests/
M
odels/CMS/CmsUser.php
CmsUser using PHP code:
http://github.com/doctrine/doctrine2/blob/master/tests/Doctrine/Tests/
O RM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php


You're basically bundling (M: Model, data&  configuration, C: Control, business 
logic / code) into a single class while the MVC pattern is all about separating M,V 
and C.

Jonathan, I think you are misinterpreting this code. There is no Controller (Front controller, or parameter mapping from $_POST or $_GET) nor View responsibilities (echo) here. These are all Model concerns: how is data persisted, how is it mapped to the persistence layer, how are entities created and how are their dependencies injected, etc.

By using doctrine, you are adopting & subscribing to Doctrines philosophy of how tool based modeling should work. The code doesnt run without doctrine in the mix anyway (you'd have their entity manager in play at all times). How they (the Doctrine project) decide to manage mappings is up to them, and you'd be free to either consume their ORM framework, or not. It is both a development time and production time tool.

What's wrong with a simple configuration file? Caching the parsed config in 
shared memory?

There is nothing wrong with that, but that is only a single approach. Alot of times, developers want a close relationship between the metadata and the code it is about. That means not in separate files, but inside the same file. This is why projects like *Hibernate are so popular in enterprise software. No one wants to develop an ORM, they just want a way to persist their objects.. and a little penalty in performance is a sound trade-off.

One important flaw rarely mentioned with annotations config: your code now 
depends on framework X to read the annotations instead of a simple 
configuration file (.xml, .ini., ...)

Doctrine, Symphony DI, even ZF.. and include to that the non PHP solutions.. none of these are frameworks you can adpot in less than 5 minutes. It takes some investment of time to understand their philosophy and also decide how it best fits into your personal code toolkit.

That means that you'd have understood how said framework plans and does use these annotations.

Sorry if I might sound harsh but configuration through annotations is terrible.
You'll find many .net or java developers that agree, I'd say it's 50-50 if not 
more 70-30.

Does this discussion still belong in internals? We could argue about this for 
months, java astronauts don't even agree how annotations are useful:
http://www.javaworld.com/community/node/2613

Arguments like this will always exist. But that's less the point. The point is is that there are many developers that exists that have taken the time to adopt a persistence framework like *Hibernate, and no one can argue that they do not get their job done, and annotations have certainly helped them get there and create maintainable code.

-ralph

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to