Hi Matthew, After reading your slides from DPC a while ago I've been looking into the service layer pattern and have done al ittle refactoring in a project I'm working on. One thing I have been wondering is do you ever access your mapper directly within a controller (i.e. editing a record and just needing to fetch by ID) or do you have all required methods within the service?
Currently I have almost all of my business logic in services so my controllers are pretty much just handling request flow, redirects etc. However some parts all I need to do is grab a single entity by it's primary key (my domain model is almost 1:1 with the database schema). Any thoughts? Thanks, Tom 2009/7/28 Matthew Weier O'Phinney <[email protected]> > -- Don Bosco van Hoi <[email protected]> wrote > (on Monday, 27 July 2009, 03:57 PM -0700): > > there are lots of nice approaches out there how to setup models and > > databases and i really like the idea with the data mapper pattern as > > described in the official zend framework quickstart tutorial. > > > > But what i am missing is also an example for webservices. How would you > > setup a model to handle a soap/rest request? Is a Data Mapper also useful > if > > you only need to read data? > > The answer to this is: write a Service Layer. > > The best way to describe a Service Layer is that it is the public API to > your application: it represents all the discrete actions and behaviors > that your application provides. > > You then write your MVC application to consume your Service Layer (which > falls under the aegis of the Model); your controllers utilize the > service objects, and pass results to the view. > > When you want to expose parts of your application via a web service, > then, it becomes quite easy: simply write a class that proxies to parts > of your service layer, and attach that class to one of the various > server classes in Zend Framework: Zend_Soap_Server, Zend_XmlRpc_Server, > Zend_Json_Server, Zend_Amf_Server. > > I went through some methods surrounding this both in my Dutch PHP > Conference Zend Framework tutorial: > > http://www.slideshare.net/weierophinney/zend-framework-workshop-dpc09 > > as well as the CodeWorks webinar I did last week: > > > http://www.slideshare.net/weierophinney/playdoh-modelling-your-objects-1766001 > > The benefits of this approach include easier and better approaches for > unit testing, code re-use, the ability to use dependency injection, and > much, much more. > > > For example i want to fetch some items from several shopping provider. > Does > > this one makes sense? Isnt this too much overhead? > > > > So what would be a good solution if you have different providers but > always > > want to return the same Item object? Add another method to > > Default_Model_Item, for example fetchAllFromProvider2()? > > > > Thank you in advance for your replies. > > > > class Default_Model_Item > > { > > protected $_title; > > protected $_price; > > protected $_description; > > > > // getter setter > > public function getXXX() > > public function setXXX() > > > > public function find($id); > > > > // different providers > > public function fetchAllFromProvider1($options); > > public function fetchAllFromProvider2($options); > > } > > > > class Default_Model_ItemMapper > > { > > public function find($id, $model); > > > > public function fetchAllFromProvider1($options) > > { > > $provider = new Default_Model_Webservice_ShoppingProvider1(); > > $listings = $provider->makeCall($options); > > foreach($listings as $item) > > { > > $entry = new Default_Model_Item(); > > $entry->setTitle(); > > $entry->setPrice(); > > $entry->setDescription(); > > } > > } > > > > public function fetchAllFromProvider2($options) > > { > > $provider = new Default_Model_Webservice_ShoppingProvider2(); > > $listings = $provider->makeCall($options); > > foreach($listings as $item) > > { > > $entry = new Default_Model_Item(); > > $entry->setTitle(); > > $entry->setPrice(); > > $entry->setDescription(); > > } > > } > > > > } > > > > class Default_Model_Webservice_ShoppingProvider1 { > > public function makeCall($options) > > } > > > > class Default_Model_Webservice_ShoppingProvider2 { > > public function makeCall($options) > > } > > -- > > View this message in context: > http://www.nabble.com/Zend-Model-with-Webservices-%28Soap-Rest%29-tp24689665p24689665.html > > Sent from the Zend Framework mailing list archive at Nabble.com. > > > > -- > Matthew Weier O'Phinney > Project Lead | [email protected] > Zend Framework | http://framework.zend.com/ >
