[et_pb_section fb_built=”1″ disabled_on=”off|off|off” admin_label=”Header” _builder_version=”3.22″ parallax=”on” max_width_tablet=”” max_width_phone=”” max_width_last_edited=”on|desktop” custom_padding=”0||0|0px|false|false” top_divider_height=”0px” global_colors_info=”{}”][et_pb_row column_structure=”1_2,1_2″ _builder_version=”3.25″ custom_padding=”27px|0px|0|0px|false|false” global_colors_info=”{}”][et_pb_column type=”1_2″ _builder_version=”3.25″ custom_padding=”|||” global_colors_info=”{}” custom_padding__hover=”|||”][et_pb_text _builder_version=”3.27.4″ text_font=”||||||||” text_font_size=”17px” text_line_height=”1.9em” header_font=”|300|||||||” header_font_size=”60px” header_line_height=”1.4em” header_2_font=”Roboto|300|||||||” header_2_font_size=”50px” header_2_line_height=”1.2em” header_4_font=”|600|||||||” header_4_text_color=”#666666″ header_4_line_height=”2em” max_width=”136%” custom_margin=”|||” header_font_size_tablet=”40px” header_font_size_phone=”32px” header_font_size_last_edited=”on|phone” locked=”off” global_colors_info=”{}”]
Full-day workshop:
Clean, Pragmatic Architecture
[/et_pb_text][/et_pb_column][et_pb_column type=”1_2″ _builder_version=”3.25″ custom_padding=”|||” global_colors_info=”{}” custom_padding__hover=”|||”][et_pb_image src=”https://romania.voxxeddays.com/wp-content/uploads/2019/04/FotografulTAU-025.jpg” align_tablet=”center” align_phone=”” align_last_edited=”on|desktop” _builder_version=”3.23″ max_width=”80%” border_radii=”on|0%|0%|0%|0%” global_colors_info=”{}”][/et_pb_image][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”3.25″ custom_padding=”41px|0px|22px|0px|false|false” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”3.25″ custom_padding=”|||” global_colors_info=”{}” custom_padding__hover=”|||”][et_pb_text _builder_version=”3.29.3″ custom_padding=”||0px|||” global_colors_info=”{}”]
The purpose of this course is to help developers write elegant, clean code.
Meaning expressive, simple code that is also flexible and testable. The course is a mix of theory, discussions and hands-on exercises designed to teach developers practical techniques they can immediately apply to real-world projects.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row column_structure=”1_3,1_3,1_3″ _builder_version=”3.25″ custom_padding=”0|0px|0|0px|false|false” global_colors_info=”{}”][et_pb_column type=”1_3″ _builder_version=”3.25″ custom_padding=”|||” global_colors_info=”{}” custom_padding__hover=”|||”][et_pb_text _builder_version=”4.14.7″ text_font=”Sansation|300|||||||” link_font=”||||||||” ul_font=”||||||||” ol_font=”||||||||” quote_font=”||||||||” header_font=”||||||||” background_color=”#FFFFFF” global_colors_info=”{}”]
Why this workshop?
This workshop is a pragmatic review of the most common architectural decisions of a backend system, including Layered Architecture, agnostic Domain, decoupled subdomains, data mappers, and validation. For deep understanding, most concepts are demonstrated in Java code, uncovering a series of implementation tricks that you can immediately apply to your project. The last section overviews practical strategies that you can use to gradually decouple a monolithic system into independent subdomains.
The lack of a clear structure can slow us down and put the project in danger, but over-engineering can also generate remarkable waste of time, money, and brainpower. To help you find the amount of “just-enough design”, this training adopts a pragmatic point of view and then introduces techniques to gradually evolve the design to match the growing functional complexity.
By the end of the workshop, you’ll understand:
- Dependency Inversion Principle, and why it’s essential in architectures
- How to simplify logic via Separation by Layers of Abstraction
- The principles underlying the Onion-, Hexagonal-, Ports-and-Adapters, and Clean- Architectures
- The main challenges of breaking down a codebase in vertical slices
And you’ll be able to:
- Simplify your core logic by protecting it against API models
- Progressively extract orchestration logic from existing code in Facades
- Compare and apply strategies to decouple a monolith in subdomains
[/et_pb_text][/et_pb_column][et_pb_column type=”1_3″ _builder_version=”3.25″ custom_padding=”|||” global_colors_info=”{}” custom_padding__hover=”|||”][et_pb_text _builder_version=”4.14.7″ text_font=”||||||||” background_color=”#FFFFFF” custom_margin=”|||0px|false|false” hover_enabled=”0″ global_colors_info=”{}” sticky_enabled=”0″]
What will you learn?
- Control your core data structures
- Data Transfer Objects, seen as enemies
- Isolating your Domain: why, when, and how
- Adapter Pattern
- The fallacy of auto-mappers
- Dependency Inversion Principle (at package and module level)
- Break down logic in Layers (horizontally)
- Layered Architecture and variants
- Facade Pattern and Separation by Layers of Abstraction
- Enriching Entities with behavior and constraints
- Keeping Domain Services cohesive
- Enriching the Domain Model
-
- Data Validation Strategies
- Feature Envy code smell
- What logic [not] to push in Entities
- Break logic in Subdomains (vertically)
- The Onion Architecture – 1 hour
- Fundamental rules
- Debate: unified Domain/Persistence model (pragmatic variation)
- Debate: selecting DTOs with ORM (pragmatic variation)
- Enforcing rule
- Breaking the Monolith: the safe parts
- The history of a successful monolith
- Replace direct cross-subdomain calls with API calls and domain events
- (ORM) Replace entity links with numeric columns
- Introduce (redundant) projections
- Breaking the Monolith: cutting the links (overview)
- Decoupling via orchestration or choreography
- Facing Eventual Consistency by cutting Foreign Keys, Distributing Transactions, and Replicating
- Wrap-up
- Review of the key take-aways
- The clash between Single Responsibility Principle (SRP) and Don’t Repeat Yourself (DRY)
- More debates / Q&A
[/et_pb_text][/et_pb_column][et_pb_column type=”1_3″ _builder_version=”3.25″ custom_padding=”|||” global_colors_info=”{}” custom_padding__hover=”|||”][et_pb_text _builder_version=”4.14.7″ text_font=”Sansation|300|||||||” link_font=”||||||||” ul_font=”||||||||” ol_font=”||||||||” quote_font=”||||||||” header_font=”||||||||” background_color=”#FFFFFF” hover_enabled=”0″ global_colors_info=”{}” sticky_enabled=”0″]
Who is the trainer?
Victor is one of the top technical trainers in Bucharest, well-known for the passion he dedicates to every minute of his classes. His training experience is impressive: he trained 1.5K+ developers over 300 days of in-house sessions held at dozens of companies throughout Europe. Today, he is regularly called by companies of all sizes to help bringing Software Craftsmanship ideology and eXtreme Programming practices to their technical culture.
After 15 years of professional career, Victor is also a Lead Architect at IBM, where he is crafting code and coaching others every day. He is Associate Professor at Politehnica University (UPB) and founder of Bucharest Software Craftsmanship Community in which he runs monthly free webinars. Victor has become internationally renowned by his passion for Clean Code and is now frequently invited to speak at many conferences around the world. His personal commitment is to grow in developers their passion for code.
You can learn more about Victor, his training offer, best talks, slides, articles and other goodies on victorrentea.ro or you can follow his daily thoughts on Twitter, LinkedIN or his Facebook Page.
Who is it for?
This workshop is for you because…
- You are a developer with hands-on experience in software design
- You are an architect or a technical lead looking to debate key design decisions
- You are an enthusiastic learner who wants to enter the area of software architecture
[/et_pb_text][/et_pb_column][/et_pb_row][/et_pb_section][et_pb_section fb_built=”1″ admin_label=”Speakers” _builder_version=”3.22″ background_color_gradient_direction=”121deg” background_size=”initial” background_position=”top_left” custom_padding=”0|0px|54px|0px|false|false” global_colors_info=”{}”][et_pb_row _builder_version=”3.25″ custom_padding=”0|0px|27px|0px|false|false” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”3.25″ custom_padding=”|||” global_colors_info=”{}” custom_padding__hover=”|||”][et_pb_text _builder_version=”4.14.7″ text_font=”|300|||||||” global_colors_info=”{}”]
Technical requirements:
A personal laptop with your favorite IDE, JDK 8+, working Maven (connected to central) and Git. You will be asked to clone a repository several days before the workshop.
Prep-work:
- Read this (very influential) article about Clean Architecture: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
- Have a taste of Domain-Driven Design https://www.infoq.com/minibooks/domain-driven-design-quickly/
- Brainstorm one question from your team to debate in the final section and send it to the organizers by the evening before the training.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”3.25″ custom_padding=”0|0px|27px|0px|false|false” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”3.25″ custom_padding=”|||” global_colors_info=”{}” custom_padding__hover=”|||”][et_pb_button button_url=”https://romania.voxxeddays.com/product/combo-clean-pragmatic-architecture-pass-5-6th-october-2022/” url_new_window=”on” button_text=”Buy combo ticket ” button_alignment=”center” _builder_version=”4.14.7″ custom_button=”on” button_text_size=”20px” button_text_color=”#ffffff” button_bg_color=”#18b9f0″ button_border_width=”8px” button_border_color=”rgba(0,0,0,0)” button_border_radius=”0px” button_letter_spacing=”0px” button_font=”|700||on|||||” button_use_icon=”off” custom_margin=”-1px|||||” box_shadow_style=”preset1″ button_text_color_hover=”#ffffff” button_border_radius_hover=”100px” button_letter_spacing_hover=”3px” locked=”off” global_colors_info=”{}” button_text_size__hover_enabled=”off” button_one_text_size__hover_enabled=”off” button_two_text_size__hover_enabled=”off” button_text_color__hover_enabled=”on” button_text_color__hover=”#ffffff” button_one_text_color__hover_enabled=”off” button_two_text_color__hover_enabled=”off” button_border_width__hover_enabled=”off” button_one_border_width__hover_enabled=”off” button_two_border_width__hover_enabled=”off” button_border_color__hover_enabled=”off” button_one_border_color__hover_enabled=”off” button_two_border_color__hover_enabled=”off” button_border_radius__hover_enabled=”on” button_border_radius__hover=”0px” button_one_border_radius__hover_enabled=”off” button_two_border_radius__hover_enabled=”off” button_letter_spacing__hover_enabled=”on” button_letter_spacing__hover=”0px” button_one_letter_spacing__hover_enabled=”off” button_two_letter_spacing__hover_enabled=”off” button_bg_color__hover_enabled=”off” button_one_bg_color__hover_enabled=”off” button_two_bg_color__hover_enabled=”off”][/et_pb_button][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”3.25″ custom_padding=”27px|0px|0|0px|false|false” global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”3.25″ custom_padding=”|||” global_colors_info=”{}” custom_padding__hover=”|||”][et_pb_text _builder_version=”3.27.4″ text_font=”||||||||” text_font_size=”20px” text_line_height=”1.9em” header_font=”||||||||” header_2_font=”Roboto|300|||||||” header_2_font_size=”50px” header_2_line_height=”1.2em” max_width=”700px” max_width_tablet=”” max_width_phone=”” max_width_last_edited=”on|desktop” header_2_font_size_tablet=”40px” header_2_font_size_phone=”32px” header_2_font_size_last_edited=”on|phone” locked=”off” global_colors_info=”{}”]
Speaker
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row column_structure=”1_2,1_2″ _builder_version=”3.25″ global_colors_info=”{}”][et_pb_column type=”1_2″ _builder_version=”3.25″ custom_padding=”|||” global_colors_info=”{}” custom_padding__hover=”|||”][et_pb_team_member name=”VICTOR RENTEA” position=”Java Champion & Independent Technical Trainer” image_url=”https://voxxedromania.ams3.cdn.digitaloceanspaces.com/2020-03-VDBUH/speakers/speakers/Victor-rentea-700.jpg” _builder_version=”4.14.7″ header_level=”h5″ header_font=”Roboto||||||||” header_text_align=”center” header_text_color=”#18B9F0″ header_font_size=”24px” header_line_height=”1.2em” body_font=”||||||||” body_text_align=”center” body_font_size=”16px” body_line_height=”1.9em” text_orientation=”left” max_width=”56%” child_filter_saturate=”0%” animation_direction=”bottom” border_radii_image=”on|0%|0%|0%|0%” border_color_all_image=”#18b9f0″ box_shadow_style_image=”preset1″ box_shadow_blur_image=”10px” box_shadow_color_image=”#18b9f0″ locked=”off” global_colors_info=”{}”][/et_pb_team_member][/et_pb_column][et_pb_column type=”1_2″ _builder_version=”3.25″ custom_padding=”|||” global_colors_info=”{}” custom_padding__hover=”|||”][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”3.25″ global_colors_info=”{}”][et_pb_column type=”4_4″ _builder_version=”3.25″ custom_padding=”|||” global_colors_info=”{}” custom_padding__hover=”|||”][et_pb_button button_url=”https://romania.voxxeddays.com/cluj-napoca/voxxed-days-cluj-napoca-2022/#speakers” url_new_window=”on” button_text=”SEE ALL OUR SPEAKERS” button_alignment=”center” _builder_version=”4.14.7″ custom_button=”on” button_text_size=”20px” button_text_color=”#ffffff” button_bg_color=”#18b9f0″ button_border_width=”8px” button_border_color=”rgba(0,0,0,0)” button_border_radius=”0px” button_letter_spacing=”0px” button_font=”|700||on|||||” button_use_icon=”off” custom_margin=”-1px|||||” box_shadow_style=”preset1″ button_text_color_hover=”#ffffff” button_border_radius_hover=”100px” button_letter_spacing_hover=”3px” locked=”off” global_colors_info=”{}” button_text_size__hover_enabled=”off” button_one_text_size__hover_enabled=”off” button_two_text_size__hover_enabled=”off” button_text_color__hover_enabled=”on” button_text_color__hover=”#ffffff” button_one_text_color__hover_enabled=”off” button_two_text_color__hover_enabled=”off” button_border_width__hover_enabled=”off” button_one_border_width__hover_enabled=”off” button_two_border_width__hover_enabled=”off” button_border_color__hover_enabled=”off” button_one_border_color__hover_enabled=”off” button_two_border_color__hover_enabled=”off” button_border_radius__hover_enabled=”on” button_border_radius__hover=”0px” button_one_border_radius__hover_enabled=”off” button_two_border_radius__hover_enabled=”off” button_letter_spacing__hover_enabled=”on” button_letter_spacing__hover=”0px” button_one_letter_spacing__hover_enabled=”off” button_two_letter_spacing__hover_enabled=”off” button_bg_color__hover_enabled=”off” button_one_bg_color__hover_enabled=”off” button_two_bg_color__hover_enabled=”off”][/et_pb_button][/et_pb_column][/et_pb_row][/et_pb_section]