{"id":24606,"date":"2021-10-18T17:04:32","date_gmt":"2021-10-18T15:04:32","guid":{"rendered":"https:\/\/sixphere.com\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/"},"modified":"2025-04-11T11:13:46","modified_gmt":"2025-04-11T09:13:46","slug":"clean-architectures-and-ddd-a-practical-journey-part-2","status":"publish","type":"post","link":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/","title":{"rendered":"Clean architectures and DDD: A practical journey. Part 2"},"content":{"rendered":"\n[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.9.2&#8243; max_width=&#8221;80%&#8221; module_alignment=&#8221;center&#8221; min_height=&#8221;700px&#8221; custom_padding=&#8221;5px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;3.25&#8243; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;3.25&#8243; custom_padding=&#8221;|||&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_text _builder_version=&#8221;4.9.2&#8243; _dynamic_attributes=&#8221;content&#8221; text_font=&#8221;||||||||&#8221; header_font=&#8221;||||||||&#8221; header_font_size=&#8221;35px&#8221; global_colors_info=&#8221;{}&#8221;]@ET-DC@eyJkeW5hbWljIjp0cnVlLCJjb250ZW50IjoicG9zdF90aXRsZSIsInNldHRpbmdzIjp7ImJlZm9yZSI6IjxoMT4iLCJhZnRlciI6IjwvaDE+IiwiZW5hYmxlX2h0bWwiOiJvZmYifX0=@[\/et_pb_text][et_pb_text _builder_version=&#8221;3.27.4&#8243; _dynamic_attributes=&#8221;content&#8221; text_font=&#8221;||||||||&#8221; text_text_color=&#8221;#e09900&#8243; custom_margin=&#8221;-30px|||||&#8221; global_colors_info=&#8221;{}&#8221;]@ET-DC@eyJkeW5hbWljIjp0cnVlLCJjb250ZW50IjoicG9zdF90YWdzIiwic2V0dGluZ3MiOnsiYmVmb3JlIjoiIiwiYWZ0ZXIiOiIiLCJsaW5rX3RvX3Rlcm1fcGFnZSI6Im9mZiIsInNlcGFyYXRvciI6IiB8ICIsImNhdGVnb3J5X3R5cGUiOiJwb3N0X3RhZyIsImVuYWJsZV9odG1sIjoib2ZmIn19@[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.9.2&#8243; custom_margin=&#8221;0px||0px||false|false&#8221; custom_padding=&#8221;0px||0px|||&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;3.25&#8243; custom_padding=&#8221;0px|||&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_text _builder_version=&#8221;4.11.2&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221;]<p><span style=\"text-decoration: underline;\"><a href=\"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-1\/\">In the previous post of this series on clean architectures and DDD<\/a><\/span>, we introduced the basic concepts of this architecture and discussed the layered design philosophy, its elements, fundamental characteristics, and, of course, the advantages of its use.<\/p>\n<p>At this point, it is worth asking <strong>how to take action<\/strong>. In other words, given a functional problem or a use case to implement, how do we apply DDD? Throughout this and the following posts in the series, we will cover the following points:  <\/p>\n<ul>\n<li>Approach to a real functional problem.<\/li>\n<li>Application and use of ubiquitous language.<\/li>\n<li>Strategic design of the solution.<\/li>\n<li>Tactical design and implementation.<\/li>\n<\/ul>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/puntazo.sixphere.com\/wp-content\/uploads\/2021\/09\/4c56a51a-964d-4546-b8e0-0e658535e87c.png&#8221; alt=&#8221;Hexagonal architecture diagram&#8221; title_text=&#8221;Hexagonal architecture diagram&#8221; _builder_version=&#8221;4.10.8&#8243; _module_preset=&#8221;default&#8221; width=&#8221;70%&#8221; width_tablet=&#8221;70%&#8221; width_phone=&#8221;100%&#8221; width_last_edited=&#8221;on|desktop&#8221; module_alignment=&#8221;center&#8221; custom_margin=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.11.2&#8243; _module_preset=&#8221;default&#8221; custom_margin=&#8221;||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221;]<h3>Problem: Control of operations in manufacturing<\/h3>\n<p>Let&#8217;s take as an example <strong>a characteristic digitization problem in a manufacturing company<\/strong> and its production flow, where operators must perform certain tasks to complete a work order that ultimately enables the manufacturing of a product.<\/p>\n<p>The usual way operators work is as follows:<\/p>\n<ul>\n<li>For each work order they are given, they take one or more of the operations they need to perform, based on their knowledge and certifications, and begin working on them.<\/li>\n<li>They mark the task as assigned to the operator and in progress, so that no one else takes it again.<\/li>\n<li>Once the task is completed, they mark it as finished and return to the beginning of the process.<\/li>\n<\/ul>\n<p>It is important to note, <strong>as a restriction<\/strong>, that operations can only be in one state at a time; that is, they are either to be done, in progress, or finished. In summary, their flow is as follows: <\/p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/puntazo.sixphere.com\/wp-content\/uploads\/2021\/10\/dd0f0494-b9aa-46e8-baf5-2dd94a3b1f82.png&#8221; alt=&#8221;Simple workflow for operation management&#8221; title_text=&#8221;Simple workflow for operation management&#8221; _builder_version=&#8221;4.11.2&#8243; _module_preset=&#8221;default&#8221; width=&#8221;70%&#8221; width_tablet=&#8221;70%&#8221; width_phone=&#8221;100%&#8221; width_last_edited=&#8221;on|desktop&#8221; module_alignment=&#8221;center&#8221; custom_margin=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.11.2&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221;]<p>Let&#8217;s see how we can implement this problem!<\/p>\n<h3>Our ally, the ubiquitous language. Business concepts <\/h3>\n<blockquote>\n<p data-renderer-start-pos=\"2\">The use of language on a project is subtle but all-important [\u2026] to create a supple, knowledge-rich design calls for a versatile, shared team language, and a lively experimentation with language that seldom happens on software projects.<\/p>\n<p>&nbsp;<\/p>\n<p data-renderer-start-pos=\"241\">Eric Evans &#8211; <em data-renderer-mark=\"true\">Domain-driven design<\/em>. pp.23 &#8211; 24. <\/p>\n<\/blockquote>\n<p><strong>One of the most important parts of DDD is the language<\/strong>. From the team sessions (development team and domain experts, of course), a shared language must emerge that explains the model unambiguously. To achieve this, special attention must be paid to what the domain experts communicate to us.  <\/p>\n<p>For this particular example, we will take the previous explanation as the information we have from the domain (let&#8217;s imagine that it was an expert who provided it to us) and extract, in a brief manner, the most important concepts and entities:<\/p>\n<ul>\n<li><b>Operator<\/b>: A technical user who performs the operations. Each operator has skills that will allow them to execute a specific operation or not.  <\/li>\n<li><b>Order<\/b>: A work order is the set of operations that one or more operators must carry out to produce a good or service, using certain consumable resources. <\/li>\n<li><b>Operation<\/b>: Operations are the smallest unit of work that an operator must perform to complete a work order. All operations belong to a specific order, must be executed by operators with the necessary skills, and are changed in status during the operator&#8217;s workflow. They can be in one of three different states: TODO, DOING, and DONE.   <\/li>\n<\/ul>[\/et_pb_text][et_pb_text _builder_version=&#8221;4.11.2&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221;]<h3>Strategic Design: the moment of truth<\/h3>\n<p>During the strategic design phase, the development team, together with domain experts, must define the <strong><em>bounded contexts<\/em><\/strong>, the ubiquitous language, and the <strong><em>context maps<\/em><\/strong> that explain the domain of the problem.<\/p>\n<p>To do this, it is recommended to follow, among other <a href=\"https:\/\/www.youtube.com\/watch?v=mLXQIYEwK24\"><span style=\"text-decoration: underline;\">techniques, <em>Event Storming<\/em><\/span><\/a>. With this technique, we can define the behavior within our domain, identify the elements involved, and understand how they are related to each other. All this information will later help determine the <strong><em>building blocks<\/em><\/strong> of our <em>software <\/em>project.  <\/p>\n<p>Continuing with the proposed example, in the following image, you can see a <strong>model of the state change of operations<\/strong>.<\/p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/puntazo.sixphere.com\/wp-content\/uploads\/2021\/10\/37002449-2301-4f9b-913e-be6e3cd3585e.png&#8221; alt=&#8221;Complete flow diagram of the operations system&#8221; title_text=&#8221;Complete flow diagram of the operations system&#8221; _builder_version=&#8221;4.11.2&#8243; _module_preset=&#8221;default&#8221; width=&#8221;100%&#8221; width_tablet=&#8221;100%&#8221; width_phone=&#8221;100%&#8221; width_last_edited=&#8221;on|desktop&#8221; module_alignment=&#8221;center&#8221; custom_margin=&#8221;20px||20px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][et_pb_text _builder_version=&#8221;4.11.2&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;||0px||false|false&#8221; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; sticky_enabled=&#8221;0&#8243;]<p>From this image and its analysis, and following the <em>Event Storming<\/em> nomenclature, enough domain information can be gathered to make a first implementation. But we will leave that for the next post. <\/p>\n\n<p><em><strong>In the next chapter of this series<\/strong>, the tactical design and implementation of the solution will be carried out.<\/em><\/p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.9.4&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;rgba(224,43,32,0.61)&#8221; background_enable_image=&#8221;off&#8221; background_size=&#8221;contain&#8221; background_position=&#8221;bottom_left&#8221; custom_margin=&#8221;30px||30px||false|false&#8221; custom_padding=&#8221;20px||20px||false|false&#8221; background_last_edited=&#8221;on|desktop&#8221; background_enable_image_tablet=&#8221;off&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.9.4&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.9.7&#8243; _module_preset=&#8221;default&#8221; header_font=&#8221;Oswald|300|||||||&#8221; header_text_align=&#8221;center&#8221; header_text_color=&#8221;#FFFFFF&#8221; header_2_font=&#8221;Oswald|300|||||||&#8221; header_2_text_align=&#8221;center&#8221; header_2_text_color=&#8221;#FFFFFF&#8221; custom_padding=&#8221;0px|40px||40px|false|false&#8221; global_colors_info=&#8221;{}&#8221;]<h2 style=\"font-size: 30px;\">Want to take the first step in digitalization? Call us with no obligation, and we&#8217;ll design your Minimum Viable Product. <\/h2>[\/et_pb_text][et_pb_button button_url=&#8221;https:\/\/meetings.hubspot.com\/jesus-maria-jurado&#8221; url_new_window=&#8221;on&#8221; button_text=&#8221;Schedule a meeting with us&#8221; button_alignment=&#8221;center&#8221; _builder_version=&#8221;4.9.2&#8243; _module_preset=&#8221;default&#8221; custom_button=&#8221;on&#8221; button_text_size=&#8221;16px&#8221; button_text_color=&#8221;#FFFFFF&#8221; button_bg_color=&#8221;#543855&#8243; button_border_width=&#8221;0px&#8221; button_letter_spacing=&#8221;0px&#8221; button_font=&#8221;Roboto Condensed|300||on|||||&#8221; button_use_icon=&#8221;off&#8221; custom_padding=&#8221;10px||10px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_button][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; module_class=&#8221;more-related-blogs-section&#8221; _builder_version=&#8221;4.9.2&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;rgba(147,149,151,0.1)&#8221; use_background_color_gradient=&#8221;on&#8221; background_color_gradient_start=&#8221;rgba(147,149,151,0.1)&#8221; background_color_gradient_end=&#8221;#ffffff&#8221; custom_margin=&#8221;||0px||false|false&#8221; custom_padding=&#8221;80px||0px|||&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.9.2&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;0px||0px|||&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.9.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.9.2&#8243; text_font=&#8221;Roboto||||||||&#8221; text_font_size=&#8221;40px&#8221; header_font=&#8221;||||||||&#8221; header_text_align=&#8221;right&#8221; header_3_font=&#8221;|600|||||||&#8221; header_3_text_align=&#8221;left&#8221; header_3_font_size=&#8221;40px&#8221; header_3_line_height=&#8221;1.1em&#8221; header_4_font=&#8221;|700||on|||||&#8221; header_4_text_color=&#8221;#255d83&#8243; header_4_font_size=&#8221;13px&#8221; header_4_letter_spacing=&#8221;2px&#8221; header_4_line_height=&#8221;1.8em&#8221; custom_margin=&#8221;-14px||10px||false|false&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<h3 style=\"font-size: 40px\">Here you have <span style=\"color: #ffa327;\">more<\/span><\/h3>[\/et_pb_text][dsm_button button_one_text=&#8221;All blogs&#8221; button_one_url=&#8221;https:\/\/sixphere.com\/en\/sixphere-world-blogs-news\/&#8221; _builder_version=&#8221;4.9.2&#8243; _module_preset=&#8221;default&#8221; custom_button_one=&#8221;on&#8221; button_one_text_size=&#8221;16px&#8221; button_one_text_color=&#8221;#FFFFFF&#8221; button_one_bg_color=&#8221;#543855&#8243; button_one_border_width=&#8221;0px&#8221; button_one_font=&#8221;Roboto|300|||||||&#8221; button_one_use_icon=&#8221;off&#8221; custom_button_two=&#8221;on&#8221; button_two_text_size=&#8221;16px&#8221; button_two_text_color=&#8221;#FFFFFF&#8221; button_two_bg_color=&#8221;#ffa327&#8243; button_two_border_width=&#8221;0px&#8221; button_two_font=&#8221;Roboto|300|||||||&#8221; button_two_use_icon=&#8221;off&#8221; custom_margin=&#8221;30px||70px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][\/dsm_button][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.9.2&#8243; _module_preset=&#8221;default&#8221; width_tablet=&#8221;&#8221; width_phone=&#8221;100%&#8221; width_last_edited=&#8221;on|phone&#8221; custom_padding=&#8221;0px||0px|||&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.7.7&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_blog fullwidth=&#8221;off&#8221; posts_number=&#8221;3&#8243; include_categories=&#8221;current&#8221; meta_date=&#8221;j F Y&#8221; excerpt_length=&#8221;150&#8243; show_more=&#8221;on&#8221; show_author=&#8221;off&#8221; show_categories=&#8221;off&#8221; show_pagination=&#8221;off&#8221; _builder_version=&#8221;4.9.2&#8243; header_level=&#8221;h4&#8243; header_font=&#8221;||||||||&#8221; header_text_align=&#8221;left&#8221; header_font_size=&#8221;24px&#8221; header_line_height=&#8221;1.2em&#8221; body_font=&#8221;Roboto Condensed|300|||||||&#8221; body_text_align=&#8221;left&#8221; body_font_size=&#8221;16px&#8221; meta_font=&#8221;Roboto Condensed||||||||&#8221; meta_text_align=&#8221;left&#8221; read_more_font=&#8221;||||||||&#8221; read_more_text_color=&#8221;#ffffff&#8221; module_alignment=&#8221;center&#8221; custom_css_read_more=&#8221;background-color: #ffa327;||border: none !important;||margin-top: 40px;&#8221; border_width_all=&#8221;0px&#8221; box_shadow_style=&#8221;preset1&#8243; box_shadow_blur=&#8221;8px&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_blog][\/et_pb_column][\/et_pb_row][\/et_pb_section]\n","protected":false},"excerpt":{"rendered":"<p>What is Domain-Driven Design and the principle of clean architectures? In this series of posts, we explain what it is, why we like it, and how to apply it. In this new post, we get to work modeling a specific functionality following the DDD philosophy.  <\/p>\n","protected":false},"author":8,"featured_media":23886,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","content-type":"","footnotes":""},"categories":[185],"tags":[187,188,186],"class_list":["post-24606","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology-innovation","tag-architecture","tag-ddd-en","tag-development"],"acf":{"cuerpo":"<p><span style=\"text-decoration: underline;\"><a href=\"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-1\/\">In the previous post of this series on clean architectures and DDD<\/a><\/span>, we introduced the basic concepts of this architecture and discussed the layered design philosophy, its elements, fundamental characteristics, and, of course, the advantages of its use.<\/p>\n<p>At this point, it is worth asking <strong>how to take action<\/strong>. In other words, given a functional problem or a use case to implement, how do we apply DDD? Throughout this and the following posts in the series, we will cover the following points:  <\/p>\n<ul>\n<li>Approach to a real functional problem.<\/li>\n<li>Application and use of ubiquitous language.<\/li>\n<li>Strategic design of the solution.<\/li>\n<li>Tactical design and implementation.<\/li>\n<\/ul><img src=\"https:\/\/sixphere.com\/wp-content\/uploads\/2021\/09\/4c56a51a-964d-4546-b8e0-0e658535e87c.png\" alt=\"Hexagonal architecture diagram\" title_text=\"Diagrama de arquitectura hexagonal\" _builder_version=\"4.10.8\" _module_preset=\"default\" width=\"70%\" width_tablet=\"70%\" width_phone=\"100%\" width_last_edited=\"on|desktop\" module_alignment=\"center\" custom_margin=\"0px||0px||false|false\" global_colors_info=\"{}\"><h3>Problem: Control of operations in manufacturing<\/h3>\n<p>Let's take as an example <strong>a characteristic digitization problem in a manufacturing<\/strong> company and its production flow, where operators must perform certain tasks to complete a work order that ultimately enables the manufacturing of a product.<\/p>\n<p>The usual way operators work is as follows:<\/p>\n<ul>\n<li>For each work order they are given, they take one or more of the operations they need to perform, based on their knowledge and certifications, and begin working on them.<\/li>\n<li>They mark the task as assigned to the operator and in progress, so that no one else takes it again.<\/li>\n<li>Once the task is completed, they mark it as finished and return to the beginning of the process.<\/li>\n<\/ul>\n<p>It is important to note, <strong>as a restriction<\/strong>, that operations can only be in one state at a time; that is, they are either to be done, in progress, or finished. In summary, their flow is as follows: <\/p><img src=\"https:\/\/sixphere.com\/wp-content\/uploads\/2021\/10\/dd0f0494-b9aa-46e8-baf5-2dd94a3b1f82.png\" alt=\"Simple workflow for operation management\" title_text=\"Flujo simple de gesti\u00f3n de operaciones\" _builder_version=\"4.11.2\" _module_preset=\"default\" width=\"70%\" width_tablet=\"70%\" width_phone=\"100%\" width_last_edited=\"on|desktop\" module_alignment=\"center\" custom_margin=\"0px||0px||false|false\" global_colors_info=\"{}\"><p>Let's see how we can implement this problem!<\/p>\n<h3>Our ally, the ubiquitous language. Business concepts <\/h3>\n<blockquote>\n<p data-renderer-start-pos=\"2\">The use of language on a project is subtle but all-important [\u2026] to create a supple, knowledge-rich design calls for a versatile, shared team language, and a lively experimentation with language that seldom happens on software projects.<\/p>\n<p>\u00a0<\/p>\n<p data-renderer-start-pos=\"241\">Eric Evans - <em data-renderer-mark=\"true\">Domain-driven design<\/em>. pp.23 - 24. <\/p>\n<\/blockquote>\n<p><strong>One of the most important parts of DDD is the language<\/strong>. From the team sessions (development team and domain experts, of course), a shared language must emerge that explains the model unambiguously. To achieve this, special attention must be paid to what the domain experts communicate to us.  <\/p>\n<p>For this particular example, we will take the previous explanation as the information we have from the domain (let's imagine that it was an expert who provided it to us) and extract, in a brief manner, the most important concepts and entities:<\/p>\n<ul>\n<li><b>Operator<\/b>: A technical user who performs the operations. Each operator has skills that will allow them to execute a specific operation or not.  <\/li>\n<li><b>Order<\/b>: A work order is the set of operations that one or more operators must carry out to produce a good or service, using certain consumable resources. <\/li>\n<li><b>Operation<\/b>: Operations are the smallest unit of work that an operator must perform to complete a work order. All operations belong to a specific order, must be executed by operators with the necessary skills, and are changed in status during the operator's workflow. They can be in one of three different states: TODO, DOING, and DONE.   <\/li>\n<\/ul><h3>Strategic Design: the moment of truth<\/h3>\n<p>During the strategic design phase, the development team, together with domain experts, must define the <strong><em>bounded contexts<\/em><\/strong>, the ubiquitous language, and the <strong><em>context maps<\/em><\/strong> that explain the domain of the problem.<\/p>\n<p>To do this, it is recommended to follow, among other <a href=\"https:\/\/www.youtube.com\/watch?v=mLXQIYEwK24\"><span style=\"text-decoration: underline;\">techniques, <em>Event Storming<\/em><\/span><\/a>. With this technique, we can define the behavior within our domain, identify the elements involved, and understand how they are related to each other. All this information will later help determine the <strong><em>building blocks<\/em><\/strong> of our <em>software <\/em>project.  <\/p>\n<p>Continuing with the proposed example, in the following image, you can see a <strong>model of the state change of operations<\/strong>.<\/p><img src=\"https:\/\/sixphere.com\/wp-content\/uploads\/2021\/10\/37002449-2301-4f9b-913e-be6e3cd3585e.png\" alt=\"Complete flow diagram of the operations system\" title_text=\"Diagrama de flujo completo del sistema de operaciones\" _builder_version=\"4.11.2\" _module_preset=\"default\" width=\"100%\" width_tablet=\"100%\" width_phone=\"100%\" width_last_edited=\"on|desktop\" module_alignment=\"center\" custom_margin=\"20px||20px||false|false\" global_colors_info=\"{}\"><p>From this image and its analysis, and following the <em>Event Storming<\/em> nomenclature, enough domain information can be gathered to make a first implementation. But we will leave that for the next post. <\/p>\n\n<p><em><strong>In the next chapter of this series<\/strong>, the tactical design and implementation of the solution will be carried out.<\/em><\/p>","clasificacion":"Most read"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Clean architectures and DDD: A practical journey. Part 2 - Sixphere - Innovaci\u00f3n que conecta tu empresa<\/title>\n<meta name=\"description\" content=\"How can a functionality be modeled following the DDD architecture principle? We will tell you where to start and what strategy to follow.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Clean architectures and DDD: A practical journey. Part 2 - Sixphere - Innovaci\u00f3n que conecta tu empresa\" \/>\n<meta property=\"og:description\" content=\"How can a functionality be modeled following the DDD architecture principle? We will tell you where to start and what strategy to follow.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Sixphere - Innovaci\u00f3n que conecta tu empresa\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/6phere\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-18T15:04:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-11T09:13:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sixphere.com\/wp-content\/uploads\/2021\/10\/pexels-igor-starkov-1117452.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1397\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Luis Candelario\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@6phere\" \/>\n<meta name=\"twitter:site\" content=\"@6phere\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Luis Candelario\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/clean-architectures-and-ddd-a-practical-journey-part-2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/clean-architectures-and-ddd-a-practical-journey-part-2\\\/\"},\"author\":{\"name\":\"Luis Candelario\",\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/#\\\/schema\\\/person\\\/2efa1d63eee7023c411ecd5bcf1ac214\"},\"headline\":\"Clean architectures and DDD: A practical journey. Part 2\",\"datePublished\":\"2021-10-18T15:04:32+00:00\",\"dateModified\":\"2025-04-11T09:13:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/clean-architectures-and-ddd-a-practical-journey-part-2\\\/\"},\"wordCount\":1767,\"publisher\":{\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/clean-architectures-and-ddd-a-practical-journey-part-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sixphere.com\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/pexels-igor-starkov-1117452.jpg\",\"keywords\":[\"Architecture\",\"DDD\",\"Development\"],\"articleSection\":[\"Technology &amp; Innovation\"],\"inLanguage\":\"en-US\"},{\"@type\":[\"WebPage\",\"ItemPage\"],\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/clean-architectures-and-ddd-a-practical-journey-part-2\\\/\",\"url\":\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/clean-architectures-and-ddd-a-practical-journey-part-2\\\/\",\"name\":\"Clean architectures and DDD: A practical journey. Part 2 - Sixphere - Innovaci\u00f3n que conecta tu empresa\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/clean-architectures-and-ddd-a-practical-journey-part-2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/clean-architectures-and-ddd-a-practical-journey-part-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sixphere.com\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/pexels-igor-starkov-1117452.jpg\",\"datePublished\":\"2021-10-18T15:04:32+00:00\",\"dateModified\":\"2025-04-11T09:13:46+00:00\",\"description\":\"How can a functionality be modeled following the DDD architecture principle? We will tell you where to start and what strategy to follow.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/clean-architectures-and-ddd-a-practical-journey-part-2\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/clean-architectures-and-ddd-a-practical-journey-part-2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/clean-architectures-and-ddd-a-practical-journey-part-2\\\/#primaryimage\",\"url\":\"https:\\\/\\\/sixphere.com\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/pexels-igor-starkov-1117452.jpg\",\"contentUrl\":\"https:\\\/\\\/sixphere.com\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/pexels-igor-starkov-1117452.jpg\",\"width\":1920,\"height\":1397,\"caption\":\"Arquitecturas limpias y DDD\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/clean-architectures-and-ddd-a-practical-journey-part-2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/sixphere.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Clean architectures and DDD: A practical journey. Part 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/sixphere.com\\\/en\\\/\",\"name\":\"Sixphere Technologies\",\"description\":\"Construimos tecnolog\u00eda de innovaci\u00f3n que conecta tu empresa de forma eficiente, \u00fatil y escalable con IA, datos, software e integraci\u00f3n.\",\"publisher\":{\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sixphere.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/#organization\",\"name\":\"Sixphere Technologies\",\"url\":\"https:\\\/\\\/sixphere.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/sixphere.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/sixphere-isopo-main.jpg\",\"contentUrl\":\"https:\\\/\\\/sixphere.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/sixphere-isopo-main.jpg\",\"width\":750,\"height\":600,\"caption\":\"Sixphere Technologies\"},\"image\":{\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/6phere\\\/\",\"https:\\\/\\\/x.com\\\/6phere\",\"https:\\\/\\\/es.linkedin.com\\\/company\\\/sixphere\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sixphere.com\\\/en\\\/#\\\/schema\\\/person\\\/2efa1d63eee7023c411ecd5bcf1ac214\",\"name\":\"Luis Candelario\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5171d692a79e49412ec263394f8d1a8be0844814c557aea36bcee0b4acde4830?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5171d692a79e49412ec263394f8d1a8be0844814c557aea36bcee0b4acde4830?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5171d692a79e49412ec263394f8d1a8be0844814c557aea36bcee0b4acde4830?s=96&d=mm&r=g\",\"caption\":\"Luis Candelario\"},\"url\":\"https:\\\/\\\/sixphere.com\\\/en\\\/blog\\\/author\\\/luis-candelario\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Clean architectures and DDD: A practical journey. Part 2 - Sixphere - Innovaci\u00f3n que conecta tu empresa","description":"How can a functionality be modeled following the DDD architecture principle? We will tell you where to start and what strategy to follow.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/","og_locale":"en_US","og_type":"article","og_title":"Clean architectures and DDD: A practical journey. Part 2 - Sixphere - Innovaci\u00f3n que conecta tu empresa","og_description":"How can a functionality be modeled following the DDD architecture principle? We will tell you where to start and what strategy to follow.","og_url":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/","og_site_name":"Sixphere - Innovaci\u00f3n que conecta tu empresa","article_publisher":"https:\/\/www.facebook.com\/6phere\/","article_published_time":"2021-10-18T15:04:32+00:00","article_modified_time":"2025-04-11T09:13:46+00:00","og_image":[{"width":1920,"height":1397,"url":"https:\/\/sixphere.com\/wp-content\/uploads\/2021\/10\/pexels-igor-starkov-1117452.jpg","type":"image\/jpeg"}],"author":"Luis Candelario","twitter_card":"summary_large_image","twitter_creator":"@6phere","twitter_site":"@6phere","twitter_misc":{"Written by":"Luis Candelario","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/#article","isPartOf":{"@id":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/"},"author":{"name":"Luis Candelario","@id":"https:\/\/sixphere.com\/en\/#\/schema\/person\/2efa1d63eee7023c411ecd5bcf1ac214"},"headline":"Clean architectures and DDD: A practical journey. Part 2","datePublished":"2021-10-18T15:04:32+00:00","dateModified":"2025-04-11T09:13:46+00:00","mainEntityOfPage":{"@id":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/"},"wordCount":1767,"publisher":{"@id":"https:\/\/sixphere.com\/en\/#organization"},"image":{"@id":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/sixphere.com\/wp-content\/uploads\/2021\/10\/pexels-igor-starkov-1117452.jpg","keywords":["Architecture","DDD","Development"],"articleSection":["Technology &amp; Innovation"],"inLanguage":"en-US"},{"@type":["WebPage","ItemPage"],"@id":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/","url":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/","name":"Clean architectures and DDD: A practical journey. Part 2 - Sixphere - Innovaci\u00f3n que conecta tu empresa","isPartOf":{"@id":"https:\/\/sixphere.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/#primaryimage"},"image":{"@id":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/sixphere.com\/wp-content\/uploads\/2021\/10\/pexels-igor-starkov-1117452.jpg","datePublished":"2021-10-18T15:04:32+00:00","dateModified":"2025-04-11T09:13:46+00:00","description":"How can a functionality be modeled following the DDD architecture principle? We will tell you where to start and what strategy to follow.","breadcrumb":{"@id":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/#primaryimage","url":"https:\/\/sixphere.com\/wp-content\/uploads\/2021\/10\/pexels-igor-starkov-1117452.jpg","contentUrl":"https:\/\/sixphere.com\/wp-content\/uploads\/2021\/10\/pexels-igor-starkov-1117452.jpg","width":1920,"height":1397,"caption":"Arquitecturas limpias y DDD"},{"@type":"BreadcrumbList","@id":"https:\/\/sixphere.com\/en\/blog\/clean-architectures-and-ddd-a-practical-journey-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/sixphere.com\/en\/"},{"@type":"ListItem","position":2,"name":"Clean architectures and DDD: A practical journey. Part 2"}]},{"@type":"WebSite","@id":"https:\/\/sixphere.com\/en\/#website","url":"https:\/\/sixphere.com\/en\/","name":"Sixphere Technologies","description":"Construimos tecnolog\u00eda de innovaci\u00f3n que conecta tu empresa de forma eficiente, \u00fatil y escalable con IA, datos, software e integraci\u00f3n.","publisher":{"@id":"https:\/\/sixphere.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sixphere.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/sixphere.com\/en\/#organization","name":"Sixphere Technologies","url":"https:\/\/sixphere.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sixphere.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/sixphere.com\/wp-content\/uploads\/2023\/12\/sixphere-isopo-main.jpg","contentUrl":"https:\/\/sixphere.com\/wp-content\/uploads\/2023\/12\/sixphere-isopo-main.jpg","width":750,"height":600,"caption":"Sixphere Technologies"},"image":{"@id":"https:\/\/sixphere.com\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/6phere\/","https:\/\/x.com\/6phere","https:\/\/es.linkedin.com\/company\/sixphere"]},{"@type":"Person","@id":"https:\/\/sixphere.com\/en\/#\/schema\/person\/2efa1d63eee7023c411ecd5bcf1ac214","name":"Luis Candelario","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5171d692a79e49412ec263394f8d1a8be0844814c557aea36bcee0b4acde4830?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5171d692a79e49412ec263394f8d1a8be0844814c557aea36bcee0b4acde4830?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5171d692a79e49412ec263394f8d1a8be0844814c557aea36bcee0b4acde4830?s=96&d=mm&r=g","caption":"Luis Candelario"},"url":"https:\/\/sixphere.com\/en\/blog\/author\/luis-candelario\/"}]}},"_links":{"self":[{"href":"https:\/\/sixphere.com\/en\/wp-json\/wp\/v2\/posts\/24606","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sixphere.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sixphere.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sixphere.com\/en\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/sixphere.com\/en\/wp-json\/wp\/v2\/comments?post=24606"}],"version-history":[{"count":0,"href":"https:\/\/sixphere.com\/en\/wp-json\/wp\/v2\/posts\/24606\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sixphere.com\/en\/wp-json\/wp\/v2\/media\/23886"}],"wp:attachment":[{"href":"https:\/\/sixphere.com\/en\/wp-json\/wp\/v2\/media?parent=24606"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sixphere.com\/en\/wp-json\/wp\/v2\/categories?post=24606"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sixphere.com\/en\/wp-json\/wp\/v2\/tags?post=24606"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}