Ralph, you're one step ahead of me.  But instead of broad dissertations on
the role of Controllers, Views, and Models, what I'd like to see is
concrete end-user code showing how each would work.  Not just controllers,
but sample views as well.  Establish a use case and then show how each
solution would solve it.

Since Pádraic has already put up a proposal, what you might do is copy his
use cases into your Layout Throwdown '07 wiki page and then translate them
to how Zend_Layout works.

I also would really, really like to see layout support integrated into
Zend Framework as soon as possible.  The difference is that if that's a
1.1 release two to four weeks down the road, that's fine.  The key is
releasing soon after 1.0.

-Matt

On Tue, June 26, 2007 9:30 am, Ralph Schindler wrote:
> Oh yeah! This is turning into a Bobby Flay style - Zend "What do we do
> with layouts" Throwdown!
>
> In all seriousness, it would be fruitless to respond to this here.  I
> think we should move this to the wiki, in a Q&A style, left-right - left
> being the ZVE POV and right being the Zend_Layout POV.
>
> This will allow us to track the goals, design notes, and discussions
> that are taking place, and in a more structured (less FUD) fashion.
>
> http://framework.zend.com/wiki/display/ZFDEV/Zend_View+Enhancement+VS.+Zend_Layout+Throwdown
>
> I also think we should both develop sites on our proposed solutions so
> that we may better demonstrate our points, what do you think of that?
>
> -ralph
>
> Pádraic Brady wrote:
>> Ralph,
>>
>> You'll have to forgive me, but I haven't read all your code yet - if I
>> batter the wrong door let me know :).
>>
>>  >I see alot of value in what you propose as it absolutely represents
>>  >simplicity.  It does not tackle the more complex, commonplace, or
>> modern
>>  >day problems with a clean solution that wouldn't require a re-write of
>>  >the current controller or the view...  That of being able to invoke
>>  >Layout specific action requests.
>>
>> There is NO rewrite required, Ralph. There are no life-altering changes.
>> My proposal addresses most of the complex/commonplace/modern day
>> problems in a few dozen lines of code which is entirely backwards
>> compatible and decoupled from the current Zend_View. Less FUD, more
>> substance...
>>
>> The common modern day application of MVC, and yes to web applications,
>> is for the View to control layout and presentation. This has always been
>> at the core of the MVC View (with relatively few exceptions). It's at
>> the core, because of one simple ideal - the View reads from the Model.
>>
>> There is absolutely no reason to pass through a Controller all the time
>> - none, zero, squat. I haven't a seen a single solid reason why this is
>> perceived as a requirement. Perhaps my PHP days were spent in the
>> wilderness, but it's alien to my experiences outside PHP.
>>
>> Your approach is based on using Controllers to render parts of a View.
>> This again is not necessary - the clearly defined pattern is Composite
>> View and it nests Views (i.e. scoped partials) not Controllers. At the
>> end of the day, you're subtly loading the Controller with responsibility
>> outside it's MVC scope - what is it you see the Controller as being
>> responsible for??? You're free to so once its decoupled (which it is).
>> But in doing so you're advocated a complex solution to an incredibly
>> simple set of problems.
>>
>> There are a handful of reasons where passing through the Controller can
>> be useful - it can sometimes be simpler, more convenient and require
>> less maintenance esp. where an existing Controller is embeddable and it
>> would defy DRY to duplicate it inside the View. In most cases though
>> it's a recipe for a maintenance and performance disaster. Try playing
>> this tune game in J2EE or Ruby and you would be quickly hung, drawn and
>> quartered by some pedantic Java Bean ;). I've seen controller based
>> solutions over the years - they are nearly always inefficient (in every
>> sense of the word). I see no reason to expect better of a PHP based
>> variant.
>>
>> Finally, you're ignoring KISS. My proposal does not necessitate "major
>> architectural changes". That's either lunacy, or you were being
>> sarcastic - I can't tell which. The majority of the changes in Zend_View
>> Enhanced Proposal relied on adding simple View Helpers. I note you
>> "borrowed" the same approach after my proposal was released ;). Just as
>> I "borrowed" it from a dozen other frameworks (although it's pretty
>> funny how everyone blames it on "borrowing" from Symfony only :)). Just
>> as they borowed it from who knows what - good ideas always rise to the
>> top eventually.
>>
>>  >There are a few problem with Padriac's proposal of the controller
>>  >plugin. First, it does not work without a change to the existing view
>>  >and controller.  This means major architectural changes that would not
>>  >be backwards compatible.  Second, this plugin introduces a few tenants
>>  >to the ZF MVC implementation that I personally am not a fan of:  a)
>>  >Views with the power and ability to be able to dispatch other action
>>  >controllers and b) MVC nesting.  This nesting would lead to resource
>>  >intensive scripts (having to manage multiple concurrent controllers
>> and
>>  >views each with their own state), and would be extremely difficult to
>>  >trace debug.
>>
>> F.U.D. - Fear, Uncertainty and Doubt. Please...
>>
>> There are no major architectural changes, and there are no backwards
>> compatibility problems. If want to campaign against Zend_View Enhanced
>> you'll need better ammunition then FUD. Better still, why not run down a
>> copy of my code and illustrate these FUDish assertions? Now that would
>> be cool - if I have made a blasting major architectural change, or
>> compromised backwards compatibility, then my code is in direct violation
>> of my Proposal requirements which declare a few soft objectives about
>> compatibility. If I am in the wrong (always possible!) at least fire me
>> a "fact".
>>
>> Controllers are time efficient View partials assuming they are wholly
>> embeddable, and where doing a View based alternative violates DRY.
>> Inefficient in terms of performance, but efficient in that by avoiding
>> DRY you spend less time developing. Your concern I would assume is that
>> Views might be hijacked into altering the Model via a controller
>> dispatch. Very valid concern - but there is no method to ringfence the
>> Model except applying discipline.
>>
>> I personally dislike dispatching controllers from the View for this very
>> reason. It is however a View Helper (it doesn't actually need changes to
>> Zend_View) and easily executed on the spot when the proposal is being
>> reviewed. It's usefulness is embedding controllers - what other
>> frameworks might refer to as "components" (for example, Rails). Hard to
>> ignore that advantage from the POV of a template driven View.
>>
>> Resource intensive scripts would arrive with any Controller based
>> solution. It inherently requires more objects, more processing, etc.
>> What do your Zend_Layout nested units live on? Your Pot is at least as
>> Black as this one ;).
>>
>>  >Quite the contrary.  If any given page needs 3 action controllers
>>  >dispatched to complete a page, who better to control this flow than
>> the
>>  >Controller?  The Layout manager gathers information either at runtime
>> or
>>  >config time in order to know which actions need to be dispatched in
>>  >stage 1 of the two-step-view for assembly in the second stage of the
>>  >two-step-view.
>>
>> You are assuming a page needs multiple controllers - which is untrue.
>> Such a requirement is a personal preference which does not reflect
>> common practice in MVC - which is that the View does most fiddly stuff
>> like this. Also it's *not* Two-Step View - if you want to be pedantic
>> there's the tiniest hint of it at best. Two-Step View is defined in
>> POEAA - Matthew's plugin solution while not entirely Two-Step is close
>> enough that the term works. What Zend_Layout does is way off course from
>> the Pattern. Not sure what pattern applies here...
>>
>>  >The fact that the layout manager processes the actions as a stack
>>  >instead of nesting allows for a very light and flexible solution, FAR
>>  >FAR from being unsuitable.
>>
>> It's not a light solution. I've seen the amount of code you need to pull
>> this off... It dwarfs my own code by a wide margin.
>>
>>  >No, not a ton, a Controller plugin (LayoutProcessor - meat and bones
>> of
>>  >the Two-step-view), many people have already implemented solutions
>> like
>>  >this.. and an Action Helper (This allows for developers to communicate
>>  >with the layout system), and an overall class Zend_Layout, to tie it
>> all
>>  >together into a configurable system.
>>
>> That is a ton - relative to the alternative. I haven't seen any similar
>> solutions (or heard from the authors) that I know of. I know plenty of
>> folk on my approach. Likely we're just moving in different groups of
>> diverging rebels :). Vive la resistance, mon ami!
>>
>>  >I don't disagree, in fact, aspect of bing able to attach a layout to
>>  >view would solve the simpler problem, but once people will start
>> digging
>>  >for a more complete solution, they might find themselves up against a
>>  >wall thats not as 'extremely flexible' at the end of the day.
>>
>> How is it inflexible? How is it not a complete solution? I can't ward
>> off this attack without fodder to chew on. I can't even tell if you
>> meant it to be FUDish! :)
>>
>> I bet ZVE covers well over 80% of the typical Layout needs as is (I'd
>> assume more, but everyone has an edge case they insist on using and it's
>> not like I polled the community). I also bet you haven't checked how
>> deep Layouts can be nested using Partials which with Module crossing
>> behaviour actually implement the Composite View Pattern - not simply a
>> reusable snippet renderer. My flexibility is getting very close to
>> meeting everything I've ever needed. I'll wait for a use case to prove
>> otherwise.
>>
>> Web-MVC as applied in J2EE is capable of everything I've mentioned.
>> Personally I think too much crap is laid at the door of Web-MVC, or
>> similar excuses. I've interpreted MVC the same way I learned it when
>> starting with Java - by reading "POEAA" and "J2EE Design Patterns". I'm
>> sure both have extracts about this stuff across half the internet...
>> There is nothing in my approach which hits the Web-MVC barrier.
>
>
>
>> Best regards,
>> Pádraic
>>
>> Pádraic Brady
>> http://blog.astrumfutura.com
>> http://www.patternsforphp.com
>>
>>
>> ----- Original Message ----
>> From: Ralph Schindler <[EMAIL PROTECTED]>
>> To: Pádraic Brady <[EMAIL PROTECTED]>
>> Cc: Martin Carpentier <[EMAIL PROTECTED]>; Zend Framework
>> General <fw-general@lists.zend.com>
>> Sent: Tuesday, June 26, 2007 2:56:16 AM
>> Subject: Re: [fw-general] Two-Step View, subclassing controller, etc
>>
>> First and foremost, its important to know that Zend_Layout implements a
>> well known and well documented pattern which has been discussed here
>> before, the Two-Step-View.
>>
>> Pádraic Brady wrote:
>>  > Hi Martin,
>>  >
>>  >  From reading the proposal extract it seems like a solution to some
>>  > similar problems I elaborated on in the Zend_View Enhanced proposal.
>> The
>>  > difference is the method of aggregating output. Zend_View Enhanced
>>  > places that responsibility in the View (Composite View Pattern, View
>>  > Helper Pattern). Ralph's proposal would place in the Controller which
>> is
>>  > similar but not the same.
>>
>> I see alot of value in what you propose as it absolutely represents
>> simplicity.  It does not tackle the more complex, commonplace, or modern
>> day problems with a clean solution that wouldn't require a re-write of
>> the current controller or the view...  That of being able to invoke
>> Layout specific action requests.
>>
>> There are a few problem with Padriac's proposal of the controller
>> plugin. First, it does not work without a change to the existing view
>> and controller.  This means major architectural changes that would not
>> be backwards compatible.  Second, this plugin introduces a few tenants
>> to the ZF MVC implementation that I personally am not a fan of:  a)
>> Views with the power and ability to be able to dispatch other action
>> controllers and b) MVC nesting.  This nesting would lead to resource
>> intensive scripts (having to manage multiple concurrent controllers and
>> views each with their own state), and would be extremely difficult to
>> trace debug.
>>
>>  > I haven't seen Ralph's implementation beyond the original Layout code
>> he
>>  > posted a while back, but my argument against a Zend_Layout at the
>> time
>>  > remains the same - the Controller manages workflow and is unsuitable
>> for
>>  > managing presentation issues like Layout. The simple reason being
>> that
>>
>> Quite the contrary.  If any given page needs 3 action controllers
>> dispatched to complete a page, who better to control this flow than the
>> Controller?  The Layout manager gathers information either at runtime or
>> config time in order to know which actions need to be dispatched in
>> stage 1 of the two-step-view for assembly in the second stage of the
>> two-step-view.
>>
>> The fact that the layout manager processes the actions as a stack
>> instead of nesting allows for a very light and flexible solution, FAR
>> FAR from being unsuitable.
>>
>>  > the Controller will use and depend on significantly more classes,
>>  > require extra controller actions to be written by the user, and
>>  > therefore require additional processing - and it all needs a ton of
>>  > code. It's akin to using a sledgehammer to stick a thumb tack into
>>
>> No, not a ton, a Controller plugin (LayoutProcessor - meat and bones of
>> the Two-step-view), many people have already implemented solutions like
>> this.. and an Action Helper (This allows for developers to communicate
>> with the layout system), and an overall class Zend_Layout, to tie it all
>> together into a configurable system.
>>
>>  > something. Other languages have consistently abandoned or advised
>>  > careful use of similar constructs in the past. My own Layout
>>  > implementation is scarcely a screen full of code - a simple decorator
>>  > effect.
>>
>> I don't disagree, in fact, aspect of bing able to attach a layout to
>> view would solve the simpler problem, but once people will start digging
>> for a more complete solution, they might find themselves up against a
>> wall thats not as 'extremely flexible' at the end of the day.
>>
>>  > I think I called this the framework's "Controller obsession" in my
>>  > original response...;). Few people in PHP seem to apply the View
>> Helper
>>  > pattern (Views using a read only Model API to read from the Model
>>  > without Controller dependecies). The pattern is pretty standard
>> outside
>>  > PHP. That said, my proposal has a requirement not to prevent
>> Controller
>>
>> Keep in mind, this isn't the MVC as proposed for smalltalk and the
>> desktop world, its the Web-MVC, or the Cli-MVC as interpreted by the
>> Zend Framework.  Everyone is entitled to their own interpretation of the
>> MVC and that is why there are a bigillion frameworks.
>>
>> The controller is important for dispatching user requested actions from
>> the device that the user is using and as such is responsible for
>> delivering the final product back to the user.. this means it should
>> probably have a hand in the subsystem that assembles the response.
>>
>>  > based solutions. I hadn't realised Ralph has started implementing the
>>  > same functionality as Partials and such though :). They all require
>>  > changes at the View level (partials are a simple rendering mechanic)
>>  > which one assumes is out of Zend_Layout's scope...
>>
>> Again, no changes needed to the core for the Zend_Layout solution.  In
>> fact, if a user decided layouts make no sense in their cli environment,
>> they can simply not use Zend_Layout.
>>
>> In summary, Zend_Layout is a standards driven component that is very
>> fast, flexible and extensible.  The only thing that is lacking is a
>> solid example (which Kevin McArther has) and some documentation.
>>
>> -ralph
>>
>>
>>
>> ------------------------------------------------------------------------
>> Building a website is a piece of cake.
>> Yahoo! Small Business gives you all the tools to get online.
>> <http://us.rd.yahoo.com/evt=48251/*http://smallbusiness.yahoo.com/webhosting/?p=PASSPORTPLUS>
>
>
>


Reply via email to