Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Avoiding the mud - Symfony Live London
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Richard Miller
September 21, 2013
Technology
810
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Avoiding the mud - Symfony Live London
Richard Miller
September 21, 2013
More Decks by Richard Miller
See All by Richard Miller
Introduction to Symfony2 - DrupalCamp London 2014
richardmiller
0
340
Avoiding the mud
richardmiller
22
12k
better searching with elasticsearch - PHPConfPL
richardmiller
2
560
better searching with elasticsearch
richardmiller
2
340
What do I get from the full stack framework?
richardmiller
1
1.7k
Advanced Service Container Utilization
richardmiller
4
1.3k
Dependency Injection and the Symfony2 Service Container
richardmiller
9
13k
Other Decks in Technology
See All in Technology
仕様駆動開発の、その先へ。決める力と確かめる仕組み
inariku
1
150
Content Mapper APIの応用例~CSS Modules、言語ファイル~
uhyo
2
380
Oracle Database Security 詳細解説
oracle4engineer
PRO
1
180
外国人エンジニアがVueプロトタイプで仕様を合わせている話 / Vue Fes Japan 2026 LT
eluwing
0
330
(swiftc) NonCopyableとライフタイム修飾子
teamhimeh
0
160
[General] 개발자로 해외 기업에서 일하기
skydoves
1
150
OneLakeをデータソースにした AI Search(Foundry IQ)の ライフサイクル管理
ryuseiiida
0
200
今から始めるAWS環境の暗号移行 - ポスト量子時代に備える
sato4mi
0
130
E2Eってつらくないですか?E2Eの管理コストを下げる手段とその実践
akaboshinit
6
2.8k
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
140
視野はAIに、視座は人に / ai-for-breadth-humans-for-perspective
nkzn
5
2.5k
【Oracle AI SPOTLIGHT ウェビナー】事例から見る!なぜOCIが選ばれたのか ― AI時代のクラウド戦略を紐解く ―
oracle4engineer
PRO
1
140
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Designing for humans not robots
tammielis
254
26k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
590
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
590
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
870
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Automating Front-end Workflow
addyosmani
1370
210k
Code Reviewing Like a Champion
maltzj
529
40k
Balancing Empowerment & Direction
lara
6
1.3k
Transcript
AVOIDING THE MUD by Richard Miller http://www.flickr.com/photos/burge5000/22568539/
@mr_r_miller http://www.richardmiller.co.uk
http://www.flickr.com/photos/brostad/8583990904
http://www.flickr.com/photos/dominik99/384027019
http://www.flickr.com/photos/jasmeet/2158002974
Bundles For Everything? http://www.flickr.com/photos/jarkel/2288176
Separate Domain Model From Bundles http://www.flickr.com/photos/30666161@N05/3705814710
HumanResourcesBundle
HumanResourcesBundle HumanResources
HumanResourcesBundle HumanResources
http://www.flickr.com/photos/26582481@N08/3040936355 Enough?
Still Tightly Coupled
AbsenceEntity Request Absence Form Cancel Absence Form Approve Absence Form
Change Absence Type Form
Sensio\HumanResources\Absence\AbsenceEntity: properties: reason: - NotBlank: { groups: [cancellation] } -
Length: { max: 300, groups: [cancellation] }
AbsenceEntity Request Absence Form Cancel Absence Form Approve Absence Form
Change Absence Type Form Request Absence Command Cancel Absence Command Approve Absence Command Change Absence Type Command
What About Templates?
AbsenceEntity upcoming .html .twig details .html .twig calendar .html .twig
unapproved .html .twig
{% if absence.endDate < date() %} past {% else %}
absence.status {% endif %} getDisplayStatus() AbsenceEntity getEndDate() getStatus()
{% if absence.endDate < date() %} past {% else %}
absence.status {% endif %} getDisplayStatus() AbsenceEntity getEndDate() getStatus()
{{ absence.displayStatus }} getDisplayStatus() AbsenceEntity getEndDate() getStatus() getDisplayStatus()
{{ absence.displayStatus }} getDisplayStatus() AbsenceEntity getEndDate() getStatus() getDisplayStatus()
AbsenceEntity Request Absence Form Cancel Absence Form Approve Absence Form
Change Absence Type Form Absence View upcoming .html .twig details .html .twig calendar .html .twig unapproved .html .twig
AbsenceEntity Request Absence Form Cancel Absence Form Approve Absence Form
Change Absence Type Form Absence View upcoming .html .twig details .html .twig calendar .html .twig unapproved .html .twig getStatus()
Unapproved Absence View Calendar View AbsenceEntity Request Absence Form Cancel
Absence Form Approve Absence Form Change Absence Type Form Upcoming Absences View Absence Details View upcoming .html .twig details .html .twig calendar .html .twig unapproved .html .twig
SRP
Behaviour Not State
Request Absence Controller Absence Entity setReason($reason) setStatus(AbsenceEntity::CANCELLED) setCancellationDate(new DateTime()) Cancel
Absence Command getReason()
Request Absence Controller Absence Entity cancel($reason) Cancel Absence Command getReason()
Cancel Absence Command Absence Entity Validate internal consistency Validate user
input
CancelAbsenceComm andHandler Cancel Absence Command Handler AbsenceEntity cancel($reason) handle($command) Request
Absence Controller Absence Entity cancel($reason) Cancel Absence Command
Infrastructure?
Absence Repository (Interface) findById($id) findUpcomingByMember($member) findAllByMember($member) Doctrine ORM Absence Repository
Doctrine ODM Absence Repository Guzzle Client Absence Repository Infrastructure Domain
AbsenceEntity Absence Repository Domain Bundle Service Config Infrastructure Doctrine ORM
Absence Repository Mapping Config
Absence Repository (Interface) findById($id) findUpcomingByMember($member) findAllByMember($member) add(AbsenceEntity $absence)
Events
OnUpdate Event AbsenceEntity Dispatches
OnUpdate Event AbsenceEntity Dispatches
Absence Cancelled Event Cancel Absence Command Handler Dispatches
Absence Cancelled Event In Memory Listener Immediate Action Place In
Messaging Queue Listens
Absence Cancelled Event Flush Listener Listens Absence Approved Event Domain
Infrastructure Listens
Separating Commands From Queries
Command Command Handler Entity Datastore
Datastore View Datastore View Datastore Command Command Handler Entity Event
Datastore View Datastore View Datastore Command Command Handler Entity View
Template Event
Separating Bundles Horizontally
Non-application Specific Code
HumanResources CustomLoggingBundle HumanResourcesBundle
HumanResourcesBundle HumanResources CustomLoggingBundle CustomLogging CustomLoggingBundle CustomLoggingBundle CustomLogging HumanResourcesBundle
HumanResources CustomLoggingBundle CustomLogging CustomLoggingBundle CustomLoggingBundle CustomLogging If it must! HumanResourcesBundle
HumanResources CustomLoggingBundle CustomLogging CustomLoggingBundle CustomLoggingBundle CustomLogging HumanResourcesBundle
Separating By Context
AbsencePlannerBundle AbsencePlanner CustomLoggingBundle CustomLogging CustomLoggingBundle RecruitmentBundle Recruitment
Message Queue/REST AbsencePlannerBundle AbsencePlanner CustomLoggingBundle CustomLogging CustomLoggingBundle RecruitmentBundle Recruitment
CustomLoggingBundle CustomLogging CustomLoggingBundle RecruitmentBundle Recruitment Off the shelf Package Message
Queue/REST Message Queue/REST AbsencePlannerBundle AbsencePlanner
Separate Commonality
AbsencePlannerBundle AbsencePlanner RecruitmentBundle Recruitment AbsencePlannerBundle AbsencePlanner CustomLoggingBundle CustomLogging CustomLoggingBundle RecruitmentBundle
Recruitment User Management
!= Staff Member Entity User Entity
AbsencePlannerBundle AbsencePlanner AbsencePlannerBundle AbsencePlanner CustomLoggingBundle CustomLogging CustomLoggingBundle RecruitmentBundle Recruitment UserManagementBundle
Now?
http://www.flickr.com/photos/mtsofan/8313606885
https://github.com/beberlei/litecqrs-php http://behat.org/
http://williamdurand.fr/ http://verraes.net/#blog http://www.whitewashing.de/
QUESTIONS?