Hi!

I just reviewed the design document. Thanks for adding the class /
method stubs to it. The design looks great, overall. Here are some
comments from my side:

ezcMvcRequestBuilder
--------------------

I think the name of this class is a bit strange. I'd favor to call it
ezcMvcRequestParser. I think this sounds more common.

ezcMvcRequestFilter
-------------------

The filters are described to be used in a method named
ezcMvcController->runRequestFilters(), while this method should be
called by ezcMvcController->run(). It does make little sense to me to
mention that a method ezcMvcController->runRequestFilters() should be
implemented at all, if the controller calls the filter itself.

Instead I would suggest to design it in either of the following ways:

a) Remove the ezcMvcController->runRequestFilters() part and just
   mention that filters should be run by the controller.
b) Require the method ezcMvcController->runRequestFilters() in the
   interface and make it be run by the request builder.

ezcMvcRequest
-------------

The class defines a $content and a $variables attribute. Where is the
difference here?

In case of GET/POST requests, there are only variables, files, etc. So
not content. In case of PUT requests, there might be content, but no
variables. Shouldn't this be unified? In case of a SOAP request, there
are only variables, too, but no content.

ezcMvcRequestAuthentication
---------------------------

This class defines an $identifier and $password field. These fields only
make sense for authentications as Basic-Auth. However, in case of e.g.
OpenID, they are not available. Such differences should be abstracted in
the class.

ezcMvcRequestFile
-----------------

This class defines an attribute $status. What is this meant for?

ezcMvcRequestUserAgent
----------------------

This struct only defines 1 attribute. Therefore it looks like overhead
to me. We can simply store the user agent as a string in the
ezcMvcRequest object. Or am I wrong?

ezcMvcRawRequest
-------------

I think that this class should not contain anything, but just work as a
base class for all raw request classes, to allows proper instanceof
checks. E.g.:

ezcMvcRawHttpRequest extends ezcMvcRawRequest
{
    // Whatever the request contains...
    // ... PHPs super global arrays make sense here...
}

ezcMvcRawSoapRequest extends ezcMvcRawRequest
{
    // Whatever the request contains...
    // ... objects from ext/soap make sense here...
}

ezcMvcRouter
------------

The description says "... select one or more controllers to run and
collect their output...". However, its method createController() only
allows to return 1 controller object. How is it supposed to select
multiple controllers?

ezcMvcViewHandler
-----------------

The design states, that this class should implement createResponse() and
handleResponse(). Both methods are just called in a chain. Is there much
sense in defining both, then? It would only make sense, if
createResponse() is defined in a different class than handleResponse().
Shouldn't this be different classes anyway? I imagine:

ezcMvcProductHtmlViewHandler extends ezcMvcViewHandler
{
    public function createResponse( ezcMvcResult $result )
    {
        // Prepare the product result for HTML output...
        // ... return a HTML response object
    }
}

ezcMvcHtmlViewSomething extends ezcMvcViewSomething
{
    public function handleResponse( ezcMvcHtmlResponse $response )
    {
        // Process a template and print the result...
    }
}

ezcMvcController
----------------

So far the design defines that the action is selected internally by the
controller. While I can live with this solution, I think the decision
belongs more to the dispatcher. This avoids quite some duplication in
controller code, I'd say.

Example Dispatcher
------------------

The example implementation uses goto. While I like that this is added to
PHP in 5.3 (e.g. for parser implementations), I don't see a sense in
using it here. We should better extract the re-run part into a method
and call it recursively, if needed.

The implementation also makes use of a $routerManager, which is not
defined anyhwhere else.


Regards,
Toby
-- 
Mit freundlichen Grüßen / Med vennlig hilsen / With kind regards

Tobias Schlitt (GPG: 0xC462BC14) eZ Components Developer

[EMAIL PROTECTED] | eZ Systems AS | ez.no
-- 
Components mailing list
Components@lists.ez.no
http://lists.ez.no/mailman/listinfo/components

Reply via email to