Hexagonal Architecture, or how to completely overengineer your application
With this slidedeck, I try to explain what Hexagonal Architecture is. The main goal is to increase you knowledge about the subject, so that unfounded generalisations based on ignorance are a thing from the past!
p a c e F o o \ B a r \ D o m a i n \ S e r v i c e ; u s e F o o \ B a r \ I n f r a s t r u c t u r e \ R e p o s i t o r y \ U s e r M y S q l R e p o s i t o r y ; c l a s s U s e r S e r v i c e { p u b l i c f u n c t i o n _ _ c o n s t r u c t ( U s e r M y S q l R e p o s i t o r y $ r e p o ) { / / . . . } }
p a c e F o o \ B a r \ D o m a i n \ S e r v i c e ; u s e F o o \ B a r \ D o m a i n \ R e p o s i t o r y \ U s e r R e p o s i t o r y ; c l a s s U s e r S e r v i c e { p u b l i c f u n c t i o n _ _ c o n s t r u c t ( U s e r R e p o s i t o r y $ r e p o ) { / / . . . } }
p a c e F o o \ B a r \ I n f r a s t r u c t u r e \ R e p o s i t o r y \ U s e r M y S q l R e p o s i t o r y ; u s e F o o \ B a r \ D o m a i n \ R e p o s i t o r y \ U s e r R e p o s i t o r y ; c l a s s U s e r M y S q l R e p o s i t o r y i m p l e m e n t s U s e r R e p o s i t o r y { p u b l i c f u n c t i o n _ _ c o n s t r u c t ( U s e r R e p o s i t o r y $ r e p o ) { / / . . . } }
S a v e B l o g P o s t { p r i v a t e $ t i t l e ; p r i v a t e $ c o n t e n t ; p r i v a t e $ t a g s = [ ] ; p u b l i c f u n c t i o n _ _ c o n s t r u c t ( $ t i t l e , $ c o n t e n t , $ t a g s ) { $ t h i s - > t i t l e = $ t i t l e ; $ t h i s - > c o n t e n t = $ c o n t e n t ; $ t h i s - > t a g s = $ t a g s ; } }
S a v e B l o g P o s t H a n d l e r { p r i v a t e $ r e p o ; p u b l i c f u n c t i o n _ _ c o n s t r u c t ( B l o g P o s t R e p o s i t o r y $ r e p o ) { $ t h i s - > r e p o = $ r e p o ; } p u b l i c f u n c t i o n h a n d l e ( S a v e B l o g P o s t $ c o m m a n d ) { $ p o s t = B l o g P o s t : : c r e a t e N e w ( $ c o m m a n d - > g e t T i t l e ( ) , $ c o m m a n d - > g e t C o n t e n t ( ) ) ; $ p o s t - > a d d T a g s ( $ c o m m a n d - > g e t T a g s ( ) ) ; $ t h i s - > r e p o - > a d d ( $ p o s t ) ; } }
B l o g A d m i n C o n t r o l l e r e x t e n d s B a s e C o n t r o l l e r { p u b l i c f u n c t i o n c r e a t e A c t i o n ( $ r e q u e s t ) { / / c r e a t e f o r m e t c . i f ( $ r e q u e s t - > i s P o s t ( ) ) { $ c o m m a n d = n e w S a v e B l o g P o s t ( $ r e q u e s t - > g e t ( ' t i t l e ' ) , $ r e q u e s t - > g e t ( ' c o n t e n t ' ) , $ r e q u e s t - > g e t ( ' t a g s ' , [ ] ) ) ; $ h a n d l e r = $ t h i s - > g e t ( ' s a v e _ b l o g p o s t _ h a n d l e r ' ) ; $ h a n d l e r - > h a n d l e ( $ c o m m a n d ) ; $ r e s p o n s e - > r e d i r e c t ( ' / f o o ' ) ; } / / d i s p l a y t e m p l a t e
B l o g A d m i n C o n t r o l l e r { p u b l i c f u n c t i o n c r e a t e A c t i o n ( $ r e q u e s t ) { / / c r e a t e f o r m e t c . i f ( $ r e q u e s t - > i s P o s t ( ) ) { $ c o m m a n d = n e w S a v e B l o g P o s t ( $ r e q u e s t - > g e t ( ' t i t l e ' ) , $ r e q u e s t - > g e t ( ' c o n t e n t ' ) , $ r e q u e s t - > g e t ( ' t a g s ' , [ ] ) ) ; $ t h i s - > c o m m a n d B u s - > h a n d l e ( $ c o m m a n d ) ; $ r e s p o n s e - > r e d i r e c t ( ' / f o o ' ) ; } / / d i s p l a y t e m p l a t e } }
B l o g A d m i n C o n t r o l l e r { p u b l i c f u n c t i o n c r e a t e A c t i o n ( $ r e q u e s t ) { / / c r e a t e f o r m e t c . i f ( $ r e q u e s t - > i s P o s t ( ) ) { $ i d = $ t h i s - > g e n e r a t o r - > g e n e r a t e I d ( ) ; $ c o m m a n d = n e w S a v e B l o g P o s t ( $ i d , $ r e q u e s t - > g e t ( ' t i t l e ' ) , $ r e q u e s t - > g e t ( ' c o n t e n t ' ) , $ r e q u e s t - > g e t ( ' t a g s ' , [ ] ) ) ; $ t h i s - > c o m m a n d B u s - > h a n d l e ( $ c o m m a n d ) ; $ r e s p o n s e - > r e d i r e c t ( ' / d e t a i l s / ' . $ i d ) ; }