Download - Think horizontally ood, ddd and bdd
![Page 1: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/1.jpg)
Codemotion ROME
@bit_sharkAndrea Giuliano
Think horizontallydo not use lighters to open beers
Giulio De Donato
andreagiuliano.it welcometothebundle.com
@liuggio
11-12 april 2014
![Page 2: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/2.jpg)
Think horizontally
@bit_shark @liuggio#codemotion
hint
We won't use technicisms and acronyms. Please see the references, we have had a lot of inspiration
![Page 3: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/3.jpg)
thinking ideal
@bit_shark @liuggio#codemotion
Given an application with certain requirements which is the technology that fit the application requirements?
![Page 4: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/4.jpg)
thinking real
@bit_shark @liuggio#codemotion
Given an application with certain requirements, I’m guru on Java I’ll use Java.
![Page 5: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/5.jpg)
think too much… … at the same technology
@bit_shark @liuggio#codemotion
What’s wrong here? I’m developing a tech-centric application
I’m fitting business requirements with technical boundaries
![Page 6: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/6.jpg)
rethink to the origin
@bit_shark @liuggio#codemotion
But what about our preferred technology? Was it the coolest? The most requested for working? Or trivially the simplest?
![Page 7: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/7.jpg)
think about laziness
@bit_shark @liuggio#codemotion
A developer should choose not the simplest tech
The developer laziness drive the developer to reuse its code!
![Page 8: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/8.jpg)
different thoughts
@bit_shark @liuggio#codemotion
A language can lack on some structural characteristic (polymorphism, strong typing)
![Page 9: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/9.jpg)
think with ease
@bit_shark @liuggio#codemotion
The success of a language is it’s distributability (cheap, easy, zero-conf)?
![Page 10: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/10.jpg)
a thought for thought
@bit_shark @liuggio#codemotion
There are successful application written in lacking languages
The success of the business make the success of the application
![Page 11: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/11.jpg)
thinking relational
@bit_shark @liuggio#codemotion
EAVthousand of libraries choose the relational model instead of schemaless • simplicity to distribute and install • even though some arguable tech detail
![Page 12: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/12.jpg)
think to aim the success
@bit_shark @liuggio#codemotion
nosql
Using the right technology in some cases could lead to a wrong choice
![Page 13: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/13.jpg)
Shaggio theorem
@bit_shark @liuggio#codemotion
Hypothesis: supposing a developer knows every technology and make a good choice for a complex application
Thesis: whatever will be the choice could be the wrong choice
…we are thinking to the app as a one big global ‘entity'
![Page 14: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/14.jpg)
think modular@bit_shark @liuggio#codemotion
we want to split the application in as many as possible modules choosing the “right” technology for each module
![Page 15: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/15.jpg)
think…
@bit_shark @liuggio#codemotion
• Split the business needs in subsets… a subset could be composed by services... • Spit and conquer and Object Oriented Design • If you have to implement a complex system, don’t implement a complex
system, implement a lot of simple systems
![Page 16: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/16.jpg)
think procedural
@bit_shark @liuggio#codemotion
developing with procedural is misleading, at the beginning you feel powerful, fast…
![Page 17: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/17.jpg)
think WTF!
@bit_shark @liuggio#codemotion
• How many times you will modify the application, did you think about Maintenance costs? • Procedural is when you create a fast program (at the beginning) but difficult to maintain.
“Tragically, the very same forces that make it so easy to add new features to a brand new Rails application are the ones that start to hold you back as the number of features grows.” cit. Matt Wynne
![Page 18: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/18.jpg)
think connected
TimeFeature
😊😁
😰🏃
@bit_shark @liuggio#codemotion
![Page 19: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/19.jpg)
think connected
TimeFeature
😊😁
😰🏃
@bit_shark @liuggio#codemotion
• The procedural code is sick with a disease called "code connected” • Object-oriented programming is not immune • Time increases exponentially with the addition of new features.
![Page 20: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/20.jpg)
think “Operation”
@bit_shark @liuggio#codemotion
All the programs are difficult to maintain, but decoupled software is easier How to understand if my code is decoupled? If you modify here and you don’t break over there.
![Page 21: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/21.jpg)
Time
Feature
think maintainability
@bit_shark @liuggio#codemotion
TDD
![Page 22: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/22.jpg)
Time
Feature
think maintainability
@bit_shark @liuggio#codemotion
TDD
• Modularity is the main concept of Object Oriented Design • The trend has changed (90 years ago), now we have to focus on maintainability • The overhead of testing before code is smaller than you think and the real adding
value is the way you develop better your application
![Page 23: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/23.jpg)
Think back to ‘89
@bit_shark @liuggio#codemotion
responsability driven approach!SOLID principles
• R. Wirfs-Brock, B. Wilkerson, “Object-Oriented Design: A Responsibility-Driven Approach” • Single responsibility principle Uncle Bob • Create a module coupling things that changes together? • Modules that communicates, but how?
![Page 24: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/24.jpg)
think tell don’t askMatt Wayne, Uncle Bob, Alec Sharp and Martin Fowler
@bit_shark @liuggio#codemotion
![Page 25: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/25.jpg)
think behaviour
@bit_shark @liuggio#codemotion
dependency injection
• Modules that communicate via protocols • Modules that exhibit a behavior not their data • Data are the guts of the module, they must not be exposed • All the public functions are API, let's take care and give them a meaning. • Each module should have its own explicit dependencies
![Page 26: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/26.jpg)
think and code
@bit_shark @liuggio#codemotion
1. An employee has always a name and a salary!
2. The salary is always greater than zero!
3. A company could add an employee
![Page 27: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/27.jpg)
think and code
@bit_shark @liuggio#codemotion
1. An employee has always a name and a salary!2. The salary is always greater than zero!3. A company could add an employee
![Page 28: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/28.jpg)
@bit_shark @liuggio#codemotion
think invariant1. An employee has always a name and a salary!2. The salary is always greater than zero!3. A company could add an employee
![Page 29: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/29.jpg)
@bit_shark @liuggio#codemotion
think consistent1. An employee has always a name and a salary!2. The salary is always greater than zero!3. A company could add an employee
![Page 30: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/30.jpg)
@bit_shark @liuggio#codemotion
think business language
3. A company could hire an employee
1. An employee has always a name and a salary!2. The salary is always greater than zero!3. A company could add an employee
![Page 31: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/31.jpg)
think behaviour not data
@bit_shark @liuggio#codemotion
Bdd!specification
![Page 32: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/32.jpg)
thinkBehaviour Driven Development
@bit_shark @liuggio#codemotion
That's why with BDD (stories and specs) you are more forced not to test the application but you focus on describe the behaviors.
With BDD you tend to describes the behavior before coding, you specify what a function should do.
![Page 33: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/33.jpg)
think behaviour defer implementation
@bit_shark @liuggio#codemotion
![Page 34: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/34.jpg)
think onion
@bit_shark @liuggio#codemotion
hexagonalDatabase as implementation detail Framework as implementation detail
![Page 35: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/35.jpg)
think to clean the Architecture
Application goal: separation of concerns Easy substitution of obsolete elements without affecting others components of the architecture
![Page 36: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/36.jpg)
Andrea Giuliano @bit_shark
andreagiuliano.it
Giulio De Donato @liuggio
welcometothebundle.com
T h i n k y o u !Thank
![Page 37: Think horizontally ood, ddd and bdd](https://reader033.vdocuments.us/reader033/viewer/2022042515/540be40a8d7f72dc6a8b46b3/html5/thumbnails/37.jpg)
References
https://farm3.staticflickr.com/2491/4193434786_306120fe90_b.jpg https://farm8.staticflickr.com/7185/13732796883_58bb40fae9_b.jpg https://farm8.staticflickr.com/7290/12859759305_51e8685d43_b.jpg https://www.flickr.com/photos/lovezonero/5304831965/sizes/l/ http://i.imgur.com/xl9v1on.jpg https://farm4.staticflickr.com/3404/3633209399_467123a6ca_o.jpg https://farm1.staticflickr.com/188/391815999_2725ca688c_b.jpg https://farm2.staticflickr.com/1116/1486403962_d055d8b1f9_o.jpg https://farm4.staticflickr.com/3055/2852526965_bee2642e0f_o.jpg
- Growing Object-Oriented Software by Guided by Tests, Steve Freeman, Nat Pryce - Implementing Domain-Driven Design by Vaughn Vernon - Unbreakable Domain Models by Mathias Verraes - Uncle Bob the clean Architecture http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html - DDD community - Matt Wayne GoRuCo 2012 Hexagonal Rails by Matt Wynne - Implementing Domain-Driven Design with Spring and vFabric Wes Williams, Vaughn Vernon - The RSpec Book Behaviour-Driven Development with RSpec, Cucumber, and Friends
by David Chelimsky, Dave Astels, Zach Dennis, Aslak Hellesøy, Bryan Helmkamp, Dan North
- Alberto Brandolini http://www.slideshare.net/ziobrando/
https://farm6.staticflickr.com/5134/5449083311_9a856145fa_b.jpg https://farm3.staticflickr.com/2583/3752448573_4cc6a2698a_b.jpg https://farm4.staticflickr.com/3325/3420223723_2805816861_b.jpg https://farm1.staticflickr.com/118/313590022_25c580474c_b.jpg https://farm4.staticflickr.com/3274/2886945884_8dfa5d849f_b.jpg https://farm5.staticflickr.com/4013/4290367973_c58749d73f_b.jpg https://farm9.staticflickr.com/8327/8091221482_dce187e288_b.jpg https://farm1.staticflickr.com/48/108484055_b07800b7c7_b.jpg https://farm8.staticflickr.com/7115/7445550970_32ac507395_b.jpg
Assets