2009年12月4日星期五

Re: [fw-mvc] PageController + ActionStack vs. Simple MVC

weierophinney wrote:
>
> -- Christian Ehmig <ehmig@boerse-go.de> wrote
> (on Friday, 04 December 2009, 02:39 AM -0800):
>> I've read some discussions about the "evil" ActionStack in this forum and
>> specifically here:
>> http://www.rmauger.co.uk/2009/03/why-the-zend-framework-actionstack-is-evil/
>>
>> I commented on that (#19).
>>
>> Now my question is - how do you setup Zend MVC for complex, highly
>> configurable websites or portals (not only simple blog applications with
>> basic CRUD operations). In particular, websites that consist of many
>> conrete
>> pages that make use of (hopefully) reusable components.
>>
>> For me the best solution is still:
>>
>> 1. Writing a Zend_Controller_Plugin that hooks into routeShutdown()
>> 2. in routeShutdown() compile the set of actions, their parameters,
>> templates and layout targets from a given page configuration (xml file,
>> database) and the layout file to be used for that page
>> 3. Push these actions to the ActionStack
>> 4. done
>>
>> Any other approaches seem not reusable and "hard-coded" for me. I can
>> give
>> further details on my implementation if needed. I am just curious how
>> others
>> solve the issue "a page consists of several actions and their respective
>> views".
>
> I've spoken and blogged a ton on this in the last year. The answer: this
> stuff is typically either part of your domain model or part of your view
> layer, but has nothing to do with your controllers.
>
> If the reason you're using ActionStack is to re-use business logic...
> then that logic should be pushed into your models. If the reason you're
> using ActionStack is to re-use view scripts, then simply consume those
> view scripts. A judicious use of view placeholders and view helpers can
> achieve some tremendous results.
>
> --
> Matthew Weier O'Phinney
> Project Lead | matthew@zend.com
> Zend Framework | http://framework.zend.com/
>
>

I tried to find some posts / blogs about this subject - I would be happy if
you could provide me with some links to your posts.

About ActionStack - we are using it to re-use both business logic and view
scripts. If working with only one action per request where is the point in
having more than one action anyway? I am talking about sth like a
"PageController" architecture. A request is handled by a PageController
which knows (from configuration) how to render the page. This includes the
layout, the actions + their parameters and templates. If you try to
implement re-usable actions, a single page will always consist of several
action calls.

Simple example:

listArticlesAction() which lists a set of articles using a given template -
the action itself queries it's data from the model: $model->getArticles() by
passing parameters.

Now, you like to display different sets of articles on different pages and
it should be completely configurable - much like in a typical CMS with db
backend.

I cannot see any benefit from using view helpers or placeholders here
instead of an ActionStack. Where would you effectively configure which set
of articles to display on a given page. Also think of several different sets
of articles per page. This sould easily be re-configurable in any point of
time.

When using the ActionStack, you have complete control by building the stack
via a given configuration.
Please correct me if I'm wrong and sorry for coming up with this topic
again...

--
View this message in context: http://n4.nabble.com/PageController-ActionStack-vs-Simple-MVC-tp948403p948502.html
Sent from the Zend MVC mailing list archive at Nabble.com.

没有评论: