web campodessa zinchenko v2 (23-07-2014)
Post on 19-Aug-2014
108 views
Embed Size (px)
DESCRIPTION
TRANSCRIPT
- DDD in PHP on example of Symfony
- cystbear Symfony expert MongoDB adept Erlang fun OSS doer KNPer https://twitter.com/1cdecoder https://github.com/cystbear http://knplabs.com/
- Learning Pyramid
- PHP? ORLY?
- What this talk about?
- About useful tool/lib?
- About success story?
- No! Its about idea Motivation!
- MVC
- Where to store business logic? Model View Controller
- Where to store business logic? Model View Controller
- Where to store business logic? Model View Controller
- Where to store business logic? Model View Controller -- YEAH!
- Welcome to Fat Stupid Ugly Controllers FSUC/FUC http://blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-unappreciated/ http://zendframework.ru/anonses/model-with-mvc http://habrahabr.ru/post/175465/
- Anemic (Domain) Model http://www.martinfowler.com/bliki/AnemicDomainModel.html http://habrahabr.ru/post/224879/ In essence the problem with anemic domain models is that they incur all of the costs of a domain model, without yielding any of the benefits. Martin Fowler
- Persistence Layer Model
- What is Not MVC (phew!) Request / Response Framework HTTP Framework http://fabien.potencier.org/article/49/what-is-symfony2
- What about model, persistence layer?
- Meet Doctrine http://www.doctrine-project.org/ SQL -- DBAL + ORM MongoDB CouchDB OrientDB PHPCR ODM OXM
- What is Inversion of control Service Locator Dependency Injection Container http://www.martinfowler.com/articles/injection.html http://fabien.potencier.org/article/11/what-is-dependency-injection
- Services http://groovy.codehaus.org/ https://grails.org/ Single Class With its Deps (min) set Easy to Replace Easy to Test MVC(S)!
- Controllers pray https://twitter.com/ornicar Get Request Submit form if any Call one Service method Return Response Rendering HTML far away
- Managers Managers Managers http://blog.codinghorror.com/i-shall-call-it-somethingmanager/ http://stackoverflow.com/questions/1866794/naming-classes-how-to- avoid-calling-everything-a-whatevermanager
- Real Pain class BackendUserProgramsPossessionFormHandler { protected $dep1; // deps holder props public function __construct(DepsClass $dep1 /*, ...*/) { $this->dep1 = $dep1; } public function process(Form $form) { $this->dep1->makeHappy($form); // ... }
- How Kris writes Symfony apps#44 https://twitter.com/kriswallsmith http://www.slideshare.net/kriswallsmith/how-kris-writessymfonyapps
- https://twitter.com/kriswallsmith http://www.slideshare.net/kriswallsmith/how-kris-writessymfonyapps How Kris writes Symfony apps#44
- Domain Logic Patterns http://martinfowler.com/books/eaa.html
- Domain Logic Patterns http://martinfowler.com/books/eaa.html Transaction Script Domain Model Table Module Service Layer
- Transaction Script
- Domain Model
- Table Module
- Domain Logic & Application logic
- Service Layer
- What is next? RAD DDD Patterns Examples Layers Goodies
- DDD != RAD Code First Do not Care about persistence (yet)
- Domain Model Repository Value Object DTO Strategy State Patterns & Code
- Domain Model
- Domain Model