<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	 xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>Software architecture &#8211; Nearshore Software Development Company &#8211; IT Outsourcing Services</title>
	<atom:link href="https://nearshore-it.eu/tag/software-architecture/feed/" rel="self" type="application/rss+xml" />
	<link>https://nearshore-it.eu</link>
	<description>We are Nearshore Software Development Company with 14years of experience in delivering a large scale IT projects in the areas of PHP, JAVA, .NET, BI and MDM.</description>
	<lastBuildDate>Wed, 02 Apr 2025 10:10:09 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://nearshore-it.eu/wp-content/uploads/2023/01/cropped-inetum-favicon-300x300-1-32x32.png</url>
	<title>Software architecture &#8211; Nearshore Software Development Company &#8211; IT Outsourcing Services</title>
	<link>https://nearshore-it.eu</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Platform-independent distributed systems — key components of Dapr.io</title>
		<link>https://nearshore-it.eu/articles/distributed-systems-dapr/</link>
					<comments>https://nearshore-it.eu/articles/distributed-systems-dapr/#respond</comments>
		
		<dc:creator><![CDATA[Artur Ciechomski]]></dc:creator>
		<pubDate>Thu, 27 Apr 2023 08:15:44 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Technologies]]></category>
		<category><![CDATA[Software architecture]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/?p=23697</guid>

					<description><![CDATA[Building increasingly popular distributed systems and migrating to a microservices architecture is much easier nowadays. Tools such as Dapr offer assistance which allows you to build platform-independent distributed systems from “building blocks”. In recent years, Microservices architecture got increasingly popular.]]></description>
										<content:encoded><![CDATA[
<p>Microservices work independently without affecting each other and the system is operational even if one of the microservices fails — it is one significant advantage. Read on for an introduction to <strong>Dapr.io</strong>, a tool that faces up to the challenges of the microservices architecture. &nbsp;</p>



<div class="table-of-contents">
    <p class="title">GO TO:</p>
    <ol>
                    <li><a href="#Microservices-">1.  Microservices and their challenges</a></li>
                    <li><a href="#blocks">2.  Dapr — the construction of platform-independent distributed systems</a></li>
                    <li><a href="#components">3.  Building blocks </a></li>
                    <li><a href="#Summary">4.  Summary</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Microservices-">The architecture of distributed systems&nbsp; —&nbsp; Microservices and their challenges</h2>



<p>The construction of distributed systems in the&nbsp;microservices&nbsp;architecture solves problems with accessibility and scalability, while also increasing flexibility and shortening the time-to-market of new functionalities, which is an important part of software development projects. </p>



<p>However, the complexity of such systems requires solid knowledge of how to deal with challenges like distributed transactions, load balancing, state storage, monitoring, communication between services, and security. As a result, programmers have to spend some of their time making decisions pertaining to the selection of tools and patterns and solving problems, none of which are directly related to the implementation of business logic.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="756" height="614" src="https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_1.png" alt="Distributed system architecture " class="wp-image-23708" title="Platform-independent distributed systems — key components of Dapr.io 1" srcset="https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_1.png 756w, https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_1-300x244.png 300w, https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_1-486x395.png 486w" sizes="(max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="blocks">Dapr — the construction of platform-independent distributed systems from building blocks</h2>



<p>In response to these challenges, in October 2019, Microsoft launched the Dapr (Distributed Application Runtime) open source project on the GitHub platform (<a href="https://github.com/dapr" target="_blank" rel="noreferrer noopener">https://github.com/dapr</a>), releasing the first stable version of the project for production use in February 2021. In accordance with the motto <strong>“Any language, any framework, run anywhere”</strong>, the key feature of Dapr is its independence from the programming language and the environment in which microservices are run. </p>



<p>It is a set of good practices (<strong>design patterns</strong>) implemented in the form of independent building blocks made available using the sidecar pattern. Developers often ask “Is Dapr a Service Mesh?” Whereas Service Mesh tools such as Istio, Linkerd or OSM facilitate communication between microservices using a sidecar proxy, DAPR’s task is to support developers building distributed applications.</p>



<p>Read also: <a href="https://nearshore-it.eu/articles/technologies/microservices-architecture-explained-is-it-still-a-revolution-or-already-standard-in-it-projects/" target="_blank" data-type="URL" data-id="https://nearshore-it.eu/articles/technologies/microservices-architecture-explained-is-it-still-a-revolution-or-already-standard-in-it-projects/" rel="noreferrer noopener">Microservices architecture explained. Is it still a revolution or already standard in IT projects?</a></p>



<h3 class="wp-block-heading">The sidecar pattern</h3>



<p>The sidecar pattern is a single-node pattern consisting of two containers: the application (<strong>containing the business logic</strong>) and the sidecar. The role of the sidecar container is to extend (<strong>provide new functionality</strong>) and improve the application container. The advantage of using this pattern is its modularity and the ability to reuse components used as sidecars. It also facilitates integration with older solutions without having to interfere with their code.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="756" height="296" src="https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_2.png" alt="Distributed system architecture " class="wp-image-23716" title="Platform-independent distributed systems — key components of Dapr.io 2" srcset="https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_2.png 756w, https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_2-300x117.png 300w, https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_2-495x194.png 495w" sizes="(max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>The container or process of Dapr sidecars (Dapr is not dependent on Kubernetes and can be run independently even on edge devices) provides the <strong>container/application</strong> process with a universal API for individual building blocks. Communication takes place via <strong>HTTP/gRPC</strong> protocols, so the use of building blocks does not require any dependencies to Dapr to be placed in the application code, and integration takes place when the code is run, not compiled. Additionally, to make the process more intuitive, Dapr makes SDK available for languages such as:</p>



<ul class="wp-block-list"><li><strong>Go</strong></li><li><strong>Java</strong></li><li><strong>JavaScript</strong></li><li><strong>Python</strong></li><li><strong>.NET</strong></li><li><strong>PHP</strong></li><li><strong>C++</strong></li></ul>



<p>This approach also allows applications to take advantage of solutions/patterns not available in the language in which they were written. For example, an application written in PHP can draw upon the actor pattern (a pattern used for multi-threaded applications).</p>



<h2 class="wp-block-heading" id="components">Building blocks — key components</h2>



<p>Building blocks are the framework for the distributed systems created thereon, encapsulating the functionalities of the infrastructure. Each <strong>block consists of a public API and components that implement its functionality.</strong> These components can be replaced without having to change the API provided, which constitutes an extra layer of abstraction. This approach separates the application and makes it independent of solutions from various vendors, enabling migration without the need to interfere with the code.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="756" height="348" src="https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_3.png" alt="Building block" class="wp-image-23714" title="Platform-independent distributed systems — key components of Dapr.io 3" srcset="https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_3.png 756w, https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_3-300x138.png 300w, https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_3-495x228.png 495w" sizes="(max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Use case: migrating from Mongo DB to Redis</h3>



<p>Our application state management app uses a <strong>no-SQL database</strong> — the <a href="https://nearshore-it.eu/articles/mongodb-ecommerce-database/" target="_blank" data-type="URL" data-id="https://nearshore-it.eu/articles/mongodb-ecommerce-database/" rel="noreferrer noopener">MongoDB</a> solution, referencing it directly in the code through the SDK. For reasons of best performance, we decided to migrate to Redis. As a result, we need to change the SDK and application code, which is specific to MongoDB, to adapt it to Redis. If we were to use the state management building block from Dapr from the beginning, such a change would be limited to correcting the component type in the YAML configuration file.</p>



<p>Dapr consists of 7 building blocks; however, adding more is not a problem due to its inherent openness. Let’s take a look at the individual blocks in the context of their responsibilities.</p>



<h3 class="wp-block-heading">Service-to-service invocation</h3>



<p>It allows direct communication between services, ensuring:</p>



<ul class="wp-block-list"><li><strong>reliability </strong>— automatic attempts to resend messages in case of errors, e.g., network errors</li><li><strong>mutual authentication (mTLS)</strong> and <strong>encryption</strong></li><li><strong>access control (ACL)</strong></li><li><strong>load balancing </strong>— the Round Robin algorithm</li><li><strong>automatic service discovery</strong> — uses Kubernetes DNS or mDNS depending on the environment.</li></ul>



<h3 class="wp-block-heading">State management</h3>



<p>It allows you to manage the state of services/actors, ensuring:</p>



<ul class="wp-block-list"><li><strong>datastores in the form of plug-ins </strong>— you can connect one of the many solutions available on the market, like Redis, MongoDB, MySQL, etc.</li><li>optimistic concurrency control using <strong>Etag </strong>headers</li><li><strong>data integrity </strong>— supports strong and eventual consistency</li><li><strong>bulk operations</strong></li></ul>



<h3 class="wp-block-heading">Publish and subscribe</h3>



<p>Implements the Publish/Subscribe pattern, ensuring:</p>



<ul class="wp-block-list"><li>integration with solutions like<strong> Redis Streams</strong>, <strong>Azure Service Bus</strong>, <strong>AWS SNS/SQS</strong>, etc.</li><li>sent messages formatted in accordance with the <strong>CloudEvents </strong>specification</li><li>message delivery guarantee (at least once)</li><li>message lifetime control (<strong>Time-To-Live</strong>)</li><li>topic-based grouping of messages, enabling control of senders and recipients</li><li><strong>grouping message recipients</strong> — implements the pattern of competing recipients</li></ul>



<h3 class="wp-block-heading">Resource bindings</h3>



<p>This enables two-way integration with external sources (<strong>systems/components</strong>) in isolation from a specific implementation. Binding events to specific actions takes place at the level of <strong>YAML </strong>configuration files. For example, in response to user registration events, we call up an external <strong>SendGrid service </strong>to send a confirmation e-mail. Changing the service provider for sending e-mails will not involve changes to the application code — changing the configuration is sufficient, and the application operator can do so without getting software developers involved.</p>



<h3 class="wp-block-heading">Actors</h3>



<p>It implements the actor model, which simplifies the construction of highly available and reliable systems without the need for complex concurrency and scaling patterns. In this model, the actor is the basic concurrent processing unit. The actors are completely hermetic and communicate with the outside world only via messages.</p>



<p>Characteristics of an actor:</p>



<ul class="wp-block-list"><li><strong>manages their own state (actors do not share states)</strong></li><li><strong>receives messages from other actors and processes them sequentially (one actor = one thread)</strong></li><li><strong>communicates asynchronously with other actors</strong></li></ul>



<p>Similarly to the Microsoft Orleans framework, Dapr utilizes the concept of a virtual actor, whereby the management of the actor’s life cycle takes place automatically.</p>



<h3 class="wp-block-heading">Observability</h3>



<p>Provides a structured approach for using:</p>



<ul class="wp-block-list"><li><strong>metrics </strong>— we can use, e.g., Grafana to monitor them</li><li><strong>logs </strong>— browsing can be done by means of, e.g., FluentD or Elasticsearch and Kibana</li><li><strong>distributed tracing</strong> — compliant with W3C Trace Context standards, which ensures integration with solutions such as ZIPKIN, Jaeger, and Application Insights</li></ul>



<h3 class="wp-block-heading">Secrets</h3>



<p>Provides secure storage of sensitive configuration data, i.e., passwords and keys, integrated with solutions such as Azure Key Vault, HashiCorp Vault, Kubernetes Secrets, etc.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="756" height="392" src="https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_4.png" alt="Distributed system architecture " class="wp-image-23712" title="Platform-independent distributed systems — key components of Dapr.io 4" srcset="https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_4.png 756w, https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_4-300x156.png 300w, https://nearshore-it.eu/wp-content/uploads/2023/04/nearshore_2023.04.27_graphic_4-495x257.png 495w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Summary">Summary</h2>



<p>The COVID-19 pandemic and the related changes and business challenges have dramatically accelerated the pace of moving infrastructure to<a href="https://www2.deloitte.com/pl/pl/pages/technology/articles/przyszlosc-infrastruktury-pracy-w-srodowisku-chmury.html" target="_blank" data-type="URL" data-id="https://www2.deloitte.com/pl/pl/pages/technology/articles/przyszlosc-infrastruktury-pracy-w-srodowisku-chmury.html" rel="noreferrer noopener">&nbsp;the cloud</a>&nbsp;and&nbsp;contributed to the growing popularity of multicloud and hybrid environments. The requirement for high application scalability has forced the “breaking” of monoliths and transformation to the microservices architecture. </p>



<p>This poses a serious technological and staffing challenge for companies (due to the limited availability of specialists in a given field). Solutions such as Dapr (<a href="https://dapr.io/" target="_blank" rel="noreferrer noopener">https://dapr.io</a>) and Open Application Model (<a href="https://oam.dev/" target="_blank" rel="noreferrer noopener">https://oam.dev</a>) and the concepts on which they are based, providing a set of best practices and streamlining the migration process, can significantly shorten this path and smooth it out as well.</p>



<figure class="wp-block-table"><table><tbody><tr><td></style><div class="promotion-box promotion-box--image-left "><div class="tiles latest-news-once"><div class="tile"><div class="tile-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2023/02/FotoInetum_abstract18.jpg" alt="FotoInetum abstract18" title="Platform-independent distributed systems — key components of Dapr.io 5"></div><div class="tile-content"><p class="entry-title client-name">DATA ANALYTICS SERVICES</p>

<h3>Use data to your advantage</h3>
Discover our Data Management End-to-End offer!
<a class="btn btn-primary" href="https://nearshore-it.eu/modern-data-solutions/" target="_blank" rel="noopener">Find out more!</a></div></div></div></div></td></tr></tbody></table></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/articles/distributed-systems-dapr/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Using hexagonal architecture – ports and adapters design pattern</title>
		<link>https://nearshore-it.eu/technologies/using-hexagonal-architecture-ports-and-adapters-design-pattern/</link>
					<comments>https://nearshore-it.eu/technologies/using-hexagonal-architecture-ports-and-adapters-design-pattern/#respond</comments>
		
		<dc:creator><![CDATA[Paweł Witkowski]]></dc:creator>
		<pubDate>Thu, 16 Mar 2023 07:00:00 +0000</pubDate>
				<category><![CDATA[Technologies]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Software architecture]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/?p=22516</guid>

					<description><![CDATA[When creating information systems, questions arise about how a software engineer should choose architecture and organize code. In this article, I would like to present the architecture of ports and adapters in more detail and clear up any doubts related to this pattern. What are the main advantages of hexagonal architecture? Does it work every time? Read on to find out more about the concept of hexagonal architecture.]]></description>
										<content:encoded><![CDATA[
<p></p>



<div class="table-of-contents">
    <p class="title">GO TO:</p>
    <ol>
                    <li><a href="#Ports-and-adapters,-aka-hexagonal-architecture">1.  Ports and adapters, aka hexagonal architecture</a></li>
                    <li><a href="#Ports-and-adapters-pattern">2.  Ports and adapters pattern</a></li>
                    <li><a href="#Implementation-of-this-type-of-software-architecture">3.  Implementation of this type of software architecture</a></li>
                    <li><a href="#Packages">4.  Packages</a></li>
                    <li><a href="#Hexagonal-architectural-pattern-–-description-of-an-implementation-of-classes">5.  Hexagonal architectural pattern – description of an implementation of classes</a></li>
                    <li><a href="#Ports-and-adapters-–-FAQ">6.  FAQ</a></li>
                    <li><a href="#Ports-and-adapters-design-pattern-–-summary">7.  Summary</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Ports-and-adapters,-aka-hexagonal-architecture">Ports and adapters, aka hexagonal architecture</h2>



<p><strong>Ports and adapters architecture</strong>, also known as <strong>hexagonal architecture</strong>, is a pattern that imposes the way an application&#8217;s code is built and organized. The main assumption of this pattern is to create code in such a way as to maximally separate the implementation of business logic from any external dependencies, such as frameworks, databases, external services, etc. As a result, we gain greater control over the code and independence from external libraries and the changes made to them. Let&#8217;s take a closer look at the pattern:</p>



<p><strong>Also read: </strong><a href="https://nearshore-it.eu/articles/technologies/microservices-architecture-explained-is-it-still-a-revolution-or-already-standard-in-it-projects/" target="_blank" data-type="URL" data-id="https://nearshore-it.eu/articles/technologies/microservices-architecture-explained-is-it-still-a-revolution-or-already-standard-in-it-projects/" rel="noreferrer noopener">Microservices architecture pattern</a></p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="756" height="444" src="https://nearshore-it.eu/wp-content/uploads/2023/03/nearshore_2023.03.xx_graphic_1-4.png" alt="Hexagonal architecture" class="wp-image-22523" title="Using hexagonal architecture – ports and adapters design pattern 6" srcset="https://nearshore-it.eu/wp-content/uploads/2023/03/nearshore_2023.03.xx_graphic_1-4.png 756w, https://nearshore-it.eu/wp-content/uploads/2023/03/nearshore_2023.03.xx_graphic_1-4-300x176.png 300w, https://nearshore-it.eu/wp-content/uploads/2023/03/nearshore_2023.03.xx_graphic_1-4-495x291.png 495w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Ports-and-adapters-pattern">Ports and adapters pattern</h2>



<p>The pattern of ports and adapters divides the code structure into two areas:</p>



<ul class="wp-block-list"><li>internal (application / domain)</li><li>external (infrastructure)</li></ul>



<p>The internal area focuses on the solution and implementation of the main problem (use case). This area does not make any reference to or draw from frameworks, databases, and other services or external libraries. The external area, in turn, includes the implementation of ports in the form of adapters and classes related to frameworks, such as Spring, Hibernate, etc. Communication between the internal and external areas is via ports and their implementation, that is, adapters (hence the name of the pattern).</p>



<p>Some basic assumptions of hexagonal architecture:</p>



<ol class="wp-block-list"><li>The internal area, that is, the proper implementation of logic, &#8220;does not know anything&#8221; about the external area. There is no relationship between this area and frameworks (like Spring, Hibernate, etc.).</li><li>The problem solving logic is closed in the internal area. We have access to it only through the class of the domain facade.</li></ol>



<h2 class="wp-block-heading" id="Implementation-of-this-type-of-software-architecture">Implementation of this type of software architecture</h2>



<p>The main goal of the example is to present the implementation of classes and package organization based on the concept of ports &amp; adapters architecture. An example is the domain area responsible for registering new users in the system. Two use cases have been implemented here:</p>



<ul class="wp-block-list"><li><strong>Registration of a new user </strong>– includes functionalities related to generating an account activation code and sending an activation e-mail.</li><li><strong>Activation of the user account </strong>– verifies the generated code, activates the account and sends a message to the external system.</li></ul>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="756" height="615" src="https://nearshore-it.eu/wp-content/uploads/2023/03/nearshore_2023.03.xx_graphic_2-3.png" alt="Hexagonal architecture" class="wp-image-22525" title="Using hexagonal architecture – ports and adapters design pattern 7" srcset="https://nearshore-it.eu/wp-content/uploads/2023/03/nearshore_2023.03.xx_graphic_2-3.png 756w, https://nearshore-it.eu/wp-content/uploads/2023/03/nearshore_2023.03.xx_graphic_2-3-300x244.png 300w, https://nearshore-it.eu/wp-content/uploads/2023/03/nearshore_2023.03.xx_graphic_2-3-486x395.png 486w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading" id="Packages">Packages</h3>



<ol class="wp-block-list"><li>Package: <strong>user</strong></li></ol>



<p>This is the main package of the domain within which we will operate &#8211; namely user domains. This package contains two subpackages: crud and registration.</p>



<p>2. Package: <strong>user.crud</strong></p>



<p>This package holds the logic associated with simple data retrieval operations.</p>



<p>It can also include other operations that do not have complex business logic and only serve simple operations such as CRUD (<em>create, read, update and delete</em>).</p>



<p>3. °Package:°user. Registration°° user.registration°Package:°user. Registration°° <strong>user.registration</strong></p>



<p>This package contains all classes related to the logic of registering new users in the application (implementation and handling of the aforementioned use cases).</p>



<p>4. Package: <strong>user.registration.domain</strong></p>



<p>The package contains classes with the main implementation of business logic and ports&#8217; definitions (Java interfaces) through which communication with other system components takes place. The core.user.registration.domain package contains the vanilla Java code, or code that is not dependent on frameworks and other external libraries. The only access point to the implemented logic in this package is the façade class. Bear in mind: the choice of libraries to use (e.g. commons-lang, Dozer, Orika) inside the package is up to the team and depends on the general arrangements in the project.</p>



<p>5. Package: <strong>user.registration.infrastructure</strong></p>



<p>This package includes the implementation of adapters that are used through the ports defined in the code. The package includes the implementation and configuration of components using the functions and methods of the frameworks. Libraries of other solution providers are often used here. These are responsible, for example, for generating PDF files, sending e-mails or communicating with external systems, such as Kafka, SOAP, etc.</p>



<p>6. Package: <strong>user.registration.infrastructure</strong></p>



<p>This package should include a configuration related to creating and operating framework components.</p>



<p>7. Package:<strong> user.registration.infrastructure</strong></p>



<p>This package includes controller classes and DTO classes, through which other systems or modules can use the functions of our domain. The DTO classes describe the input and output structures for the REST API.</p>



<p>8. Package: <strong>user.registration.infrastructure</strong></p>



<p>A package of classes related to the persistence layer, meaning classes responsible for retrieving and saving data in the database. These are the definitions of the data model (ORM), the DAO classes. This package includes, among other things, the implementation of the data access adapter class. In more complex cases, we may have more model classes or refer to model classes (ORM) of other packages.</p>



<h2 class="wp-block-heading" id="Hexagonal-architectural-pattern-–-description-of-an-implementation-of-classes">Hexagonal architectural pattern – description of an implementation of classes</h2>



<ol class="wp-block-list"><li>Classes from <strong>user.registration.domain</strong>:</li></ol>



<ul class="wp-block-list"><li><strong>UserRegistration </strong>– the main class of implementation of business logic. Access to the class is limited at the package level.</li><li><strong>UserRegistrationDataProvider</strong> – port for I/ O operations related to database access.</li><li><strong>UserRegistrationNotifier</strong> – the output port for sending messages to the queue.</li><li><strong>ConfirmationMailSender</strong> – the output port for sending e-mail message.</li></ul>



<p>The abovementioned ports are public interfaces of Java classes, the implementation of which is done at the level of infrastructure packages.</p>



<p><strong>UserRegistrationFacade</strong> – domain facade. The class through which we can access methods (functions) of the domain. In the illustrated example, the facade class performs the calling function for <strong>the UserRegistration class</strong> – it acts as the wrapper function. In more complex cases, we may have more classes containing business logic. Then the facade is the access point to the calls of all these domain functions. Sometimes we may need to add some framework-related validations at this stage. This may be due to the fact that some other domain areas will need to use logic from another domain. The validation function can then be used at the facade level. Of course, as in the aforementioned cases, everything depends on the general arrangements and project assumptions in the team.</p>



<p>2. Classes from the user.registration.infrastructure <strong>package</strong></p>



<p>Implementation of adapters:</p>



<ul class="wp-block-list"><li>ConfirmationMailSenderAdapter</li><li>UserRegistrationNotifierAdapter</li><li>UserRegistrationDataProviderAdapte</li></ul>



<p>3. The <strong>UserRegistrationService</strong> class is responsible for the transactionality of operations. This class calls the business logic code through the UserRegistrationFacade. For more complex operations at the level of this class, facades from other areas can be injected.</p>



<p>4. Classes from the user.registration.entrypoint <strong>package</strong>.</p>



<p>5. The UserRegistrationController <strong>class </strong>issues a REST API. It uses<strong> the UserRegistrationService</strong> class to execute transactions. In the event that operations do not require transactions, we can directly use the facade class here.</p>



<p>In the example implementation of the domain package, you can see many classes – this is one of the attributes of this pattern. Thanks to this, we gain the hermeticity of implementing business logic and structures that are related to it. The access point to the domain function is the facade class. By default, domain classes should not use framework classes, and therefore a larger number of data-related POJO (plain old Java object) classes. In the case of complex use cases, you can create more classes with business logic implementation; for example, you can separate account activation into a separate class</p>



<h2 class="wp-block-heading" id="Ports-and-adapters-–-FAQ">Ports and adapters – FAQ</h2>


<div id="rank-math-faq" class="rank-math-block">
<ol class="rank-math-list ">
<li id="faq-question-1678734202223" class="rank-math-list-item">
<h3 class="rank-math-question ">Why do we need to restrict access to certain classes at the package level?</h3>
<div class="rank-math-answer ">

<p>Using class access modifiers and methods, we hide the details of the implementation – that is, we use the so-called <strong>&#8220;class encapsulation&#8221;</strong>. We thus ensure control over the access, condition and behavior of the object. In our example, in the domain package, the facade class and the classes representing the input and output data have public access. The entire implementation of the logic is closed at the package level and access to the operation is only possible through the methods defined in the facade class.</p>

</div>
</li>
<li id="faq-question-1678734210250" class="rank-math-list-item">
<h3 class="rank-math-question ">How about libraries such as Lombok, JSR 303 (validation) or loggers in the domain package?</h3>
<div class="rank-math-answer ">

<p>According to the main concept of hexagonal architecture, we should not use external libraries. However, in practice, this is not quite the case. The libraries we use inside the domain depends on the team, because each member of the team has different experiences and ideas. However, it is worth applying some restrictions when it comes to these tools. In the projects I participated in, we were mainly limited to libraries like Java commons, mapper libraries and validation libraries.</p>

</div>
</li>
<li id="faq-question-1678734226961" class="rank-math-list-item">
<h3 class="rank-math-question ">Ports and adapters – where to set up transactions?</h3>
<div class="rank-math-answer ">

<p>One of the most important elements of the implementation of operations is their transactionality. Often the required operation will need to use a function from another code domain or we will want to call the domain function in the transaction. Then we need to ensure transactionality for these function calls. In this case, you can build a dedicated service that will contain classes of domain facades.</p>
<p>In the example, the service was implemented in the <strong>UserRegistrationService</strong> class.</p>

</div>
</li>
<li id="faq-question-1678734247985" class="rank-math-list-item">
<h3 class="rank-math-question ">Why shouldn’t we set up transactions in the facade class?</h3>
<div class="rank-math-answer ">

<p>The lack of transactions in the facade class results from the assumption that the code in the domain package should remain free of all frameworks.</p>

</div>
</li>
<li id="faq-question-1678734262009" class="rank-math-list-item">
<h3 class="rank-math-question ">Can I use Domain-Driven Design with the hexagonal architecture?</h3>
<div class="rank-math-answer ">

<p><strong>DDD (Domain-Driven Design)</strong> focuses on the domain and its business logic. It has nothing to do with frameworks and transactions. In the example, the DDD part was implemented in the domain package. The ports &amp; adapters pattern helps us organize the code and separate access to the implemented logic. We can say that this pattern is more responsible for the application layer of the solution, because it is accountable, among other things, for providing configuration, transaction or persistence mechanisms. The DDD approach and the ports &amp; adapters pattern work together in code structures. DDD solves a logical problem, and P&amp;A provides access to technical mechanisms and libraries.</p>

</div>
</li>
<li id="faq-question-1678734277625" class="rank-math-list-item">
<h3 class="rank-math-question ">Should we always use the ports &amp; adapters pattern?</h3>
<div class="rank-math-answer ">

<p>If we are wondering when to use hexagonal architecture, the aspect of business logic will be decisive. The ports &amp; adapters pattern is ideal for complex business logic, when we want to focus on solving the problems that have been issued there. The code is independent of all frameworks, making it easy to manage and test. Tests are run quickly and written easily. We write fewer integration tests – a large part of the logic is covered by unit tests. In integration tests, we verify critical paths.</p>
<p>This approach requires the creation of more classes in order to separate them from the rest of the code outside the package, which at first glance seems excessive. However, thanks to this, it is easier to separate logic into other independent modules (in microservice architectures, there is often a need to separate logic into another service).</p>
<p>In the case of applications that have little or no business logic <strong>(CRUD applications)</strong>, it is better to build a code structure in a multi-layered form <strong>(Controller – Service – Repository)</strong>. In the example, a CRUD package was separated, in which we implemented a simple operation for downloading the list of users.</p>

</div>
</li>
</ol>
</div>


<h2 class="wp-block-heading" id="Ports-and-adapters-design-pattern-–-summary">Ports and adapters design pattern – summary</h2>



<p>I hope that I have been able to present the main ideas of coding in the hexagonal architecture, and answer some of the questions that may arise during implementation. Of course, everything may differ depending on the project.</p>



<p>It is entirely up to you. The team creates the software, so organization and code structure should be readable for everyone and make work more convenient. In fact, how the pattern will be implemented depends on the team and their decision.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/technologies/using-hexagonal-architecture-ports-and-adapters-design-pattern/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Getting started with a Clean Architecture solution</title>
		<link>https://nearshore-it.eu/technologies/clean-architecture/</link>
					<comments>https://nearshore-it.eu/technologies/clean-architecture/#respond</comments>
		
		<dc:creator><![CDATA[Artur Szymanski]]></dc:creator>
		<pubDate>Wed, 15 Mar 2023 12:20:00 +0000</pubDate>
				<category><![CDATA[Technologies]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Software architecture]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/?p=22775</guid>

					<description><![CDATA[A consistent and coherent approach to writing code is an important part of project delivery. It will impact the overall work in progress and delivery time. In this article, I want to take a closer look at the Clean Architecture approach. ]]></description>
										<content:encoded><![CDATA[
<p>What is the main idea behind Clean Architecture and what situations will it work in? How can software architects, developers and clients benefit from using this design pattern? I will also try to discuss and present major advantages of this highly maintainable architecture.</p>



<div class="table-of-contents">
    <p class="title">Go to:</p>
    <ol>
                    <li><a href="#A-consistent-approach-to-software-design-is-key">1.  A consistent approach to software design is key</a></li>
                    <li><a href="#Architecture-versus-technology-debt">2.  Architecture versus technology debt</a></li>
                    <li><a href="#What-is-a-Clean-Architecture-solution?">3.  What is a Clean Architecture solution?</a></li>
                    <li><a href="#Principles-of-Clean-Architecture">4.  Principles of Clean Architecture </a></li>
                    <li><a href="#What-is-a-Clean-Architecture-solution?">5.  Clean Architecture – design patterns</a></li>
                    <li><a href="#Disadvantages-of-Clean-Architecture">6.  Disadvantages of Clean Architecture</a></li>
                    <li><a href="#Advantages-of-Clean-Architecture">7.  Advantages of Clean Architecture</a></li>
                    <li><a href="#Which-projects-should-I-use-Clean-Architecture-in?">8.  Which projects should I use Clean Architecture in?</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="A-consistent-approach-to-software-design-is-key"><strong>A consistent approach to software design is key</strong></h2>



<p>When starting a new project, software engineers usually want to complete their first task very quickly, overlooking the importance of preparing the design. This is a mistake! After all, it is the initial stage of new application development that is the most important. It allows you to work out a consistent, fixed approach that will be used by other programmers&nbsp;involved in the project.</p>



<h2 class="wp-block-heading" id="Architecture-versus-technology-debt"><strong>Architecture versus technology debt</strong></h2>



<p>Another mistake that developers often make is causing technological debt. It is true that we often create something quickly, which seems to make sense&#8230;</p>



<p>However, due to various factors, we incur more and more technological debt. When working on projects,&nbsp;taking shortcuts doesn&#8217;t pay. Haste and negligence are the most common reasons for technological debt!</p>



<p>It is not so bad if we cause a debt that we can later &#8220;pay off&#8221;, that is, make corrections on time. It is worse if it leads to debt that exceeds our skills or goes beyond the project timeframe. Unpayable technological debt can lead to something we are all familiar with. This is perfectly illustrated by the image below:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="756" height="140" src="https://nearshore-it.eu/wp-content/uploads/2023/03/nearshore_2023.03.xx_graphic_1-6.png" alt="clean architecture" class="wp-image-22780" title="Getting started with a Clean Architecture solution 8" srcset="https://nearshore-it.eu/wp-content/uploads/2023/03/nearshore_2023.03.xx_graphic_1-6.png 756w, https://nearshore-it.eu/wp-content/uploads/2023/03/nearshore_2023.03.xx_graphic_1-6-300x56.png 300w, https://nearshore-it.eu/wp-content/uploads/2023/03/nearshore_2023.03.xx_graphic_1-6-495x92.png 495w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure>



<p><em>Clean Architecture – Technological debt based on the example of Poland&#8217;s public debt</em></p>



<p>To avoid this problem, it is worth using some of the many patterns available for architectural design. My favorite approach, one which I use most often, is Clean Architecture.</p>



<h2 class="wp-block-heading" id="What-is-a-Clean-Architecture-solution?"><strong>What is a Clean Architecture solution?</strong></h2>



<p>Clean Architecture is an approach to application programming that involves separating&nbsp;the four main functional modules in a project.</p>



<p>These modules are:</p>



<ul class="wp-block-list"><li>Application,</li><li>Presentation,&nbsp;</li><li>Domain,&nbsp;</li><li>Data.</li></ul>



<p>I will discuss each of them in detail. To start with, a few words about the main concept of the Clean Architecture approach.</p>



<h2 class="wp-block-heading" id="Principles-of-Clean-Architecture"><strong>Principles of Clean Architecture&nbsp;</strong></h2>



<p>In his book <strong>&#8220;Clean Architecture&#8221;, Robert C. Martin </strong>(&#8220;Uncle Bob&#8221;) defines the purpose of architecture as supporting the life cycle of a system. As he says:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p> &#8220;Good architecture makes a system easy to understand, easy to develop, easy to maintain and easy to implement. The ultimate goal is to minimize system lifecycle costs and maximize developer productivity.&#8221;&nbsp;</p></blockquote>



<p>While creating the Clean Architecture approach, Martin aimed to work out a project structure with clearly separated responsibilities of different layers.</p>



<p>According to the Clean Architecture design principles,<strong> each layer should perform one task</strong> and be easily isolated from others. Another assumption is that a single piece of code could be shared between multiple environments. This would be done by bringing out two main modules independent of the technology in which we create the application: Presentation and Domain, and sharing them in other environments, adding only the Application and Data layers. These layers are closely linked to the environment in which we run the project. A good example would be writing business logic once and sharing it across iOS and Android mobile applications as well as web and desktop applications.</p>



<p><strong>Also read:</strong></p>



<ul class="wp-block-list" id="block-abb80440-3b4e-4efb-88cd-0af821dc6959"><li><strong><a href="https://nearshore-it.eu/articles/technologies/microservices-architecture-explained-is-it-still-a-revolution-or-already-standard-in-it-projects/">Microservices architecture</a></strong></li><li><strong><a href="https://nearshore-it.eu/articles/mongodb-ecommerce-database/">MongoDB&nbsp;</a></strong></li><li><strong><a href="https://nearshore-it.eu/articles/technologies/using-hexagonal-architecture-ports-and-adapters-design-pattern/">Hexagonal architecture, a.k.a. ports and adapters</a></strong></li></ul>



<h2 class="wp-block-heading"><strong>Clean Architecture – design patterns</strong></h2>



<p>The presentation module can be implemented using a number of popular design patterns:</p>



<ul class="wp-block-list"><li>Model View ViewModel (MVVM),</li><li>Model View Presenter (MVP),</li><li>Model View Intent (MVI),</li><li>Model View Controller (MVC)</li></ul>



<p>and many others. Each developer has their own preference when it comes to choosing a pattern, although each of them has advantages and disadvantages. For the purpose of describing this architecture, we will focus on the MVP approach, the one I personally prefer.</p>



<h3 class="wp-block-heading"><strong>Application</strong></h3>



<p>The application layer has the strongest connection to technology, where we use the Clean Architecture approach. It provides the entire <strong>visual part </strong>of the project and reacts to the tasks provided by the presentation layer. This layer determines how the data will be displayed. It contains the display logic and informs the presentation layer of any actions performed by the user. It also handles the Presenter&#8217;s state maintenance mechanism and prepares all the necessary dependencies for its proper operation.</p>



<h3 class="wp-block-heading"><strong>Presentation</strong></h3>



<p>The Presenter controls both the entire application and individual screens. It also reacts to individual actions performed by the user in the visual part (GUI). It is also here that the decision is made on how to handle given tasks or which part of the application to show to the user in turn. UseCases, described below, are the only way this module communicates with others. It is used, for example, to execute business logic or to retrieve specific data. In the MVP approach, each Presenter has an interface to communicate with the view. This communication only allows tasks to be delegated to the view, but it does not allow something to be requested in return. Simply put, the <strong>Presenter executes functions on the visual interface, </strong>but these functions cannot have a return type.</p>



<h3 class="wp-block-heading"><strong>Domain</strong></h3>



<p>Domain is the module that contains the <strong>business logic.</strong> It consists of a number of components:</p>



<h3 class="wp-block-heading"><strong>UseCase</strong></h3>



<p>The most important, <strong>externally visible component.</strong> It is used by the presentation layer. UseCases are mappings of real business requirements that provide the presentation logic with access to data operations (fetch, change, listen for changes). They also allow business logic to be performed &#8211; calculations or manipulations &#8211; on data. It is worth mentioning that they are the only means of communication between the presentation layer and the domain layers. Data is transported by models stored in this layer as well. UseCases access data through DataSources via the interface they provide. The other type of dependencies they use are classes from the Logic layer described in the next parts of the article.</p>



<h3 class="wp-block-heading"><strong>Model</strong></h3>



<p>This is a <strong>collection of data</strong> gathered in some logical way, used by business logic. This model does not have to be identical to the data layer model. It can, for example, combine several data models depending on the needs of the application.</p>



<h3 class="wp-block-heading"><strong>Logic</strong></h3>



<p>A place in the structure that is used to store separated classes with extended business logic. This place makes it possible to avoid an extensive UseCase.</p>



<h3 class="wp-block-heading"><strong>DataSource</strong></h3>



<p>The most important task of DataSources is to decide where data will be retrieved from or stored. DataSources, by means of interfaces, have access to all the data sources that the Data module exposes. In addition to the data inside, you will also find Mappers to translate the data from the Data layer into business models that will be used later. The DataSources are <strong>the only connection between the Data module and the rest of the business logic,</strong> and they are the ones that further expose the interfaces that give access to the customized data for the UseCase.</p>



<h3 class="wp-block-heading"><strong>Mappers</strong></h3>



<p>The mappers in the Clean Architecture are responsible for the consistency of data provided by the Data layer. Here we check that all the necessary data has been provided so that the business logic can be fully operational. Mappers often combine several data layer objects from different sources to create one with all the data needed by business logic.</p>



<h3 class="wp-block-heading"><strong>Data</strong></h3>



<p>A module that provides <strong>access to all types of data sources</strong> and models that map these data. The methods provided by this module can only be accessed via interfaces provided by this module. It is also the second module with the biggest dependence on the platform which Clean Architecture is used on.</p>



<h3 class="wp-block-heading"><strong>Data transfer object</strong></h3>



<p>A data transfer object (DTO) is a model for two-way data transfer. Such models are only used in the Data layer, and depending on whether the data is being sent or retrieved, it is translated into or from business models using Mappers.</p>



<h3 class="wp-block-heading"><strong>Data</strong></h3>



<p>Here data used in the rest of the application is retrieved and stored. Some examples of data sources are Bluetooth, Internet, Shared Preferences, databases, files, GPS, camera, gyroscopes or systems. Such data is accessed via the interface, which allows the source to be easily swapped. The substitution of such a source is done by specifying different objects implementing this interface. The substitution of data sources is most commonly used, for example, to support different types of servers or to support data mocking.</p>



<h2 class="wp-block-heading" id="Disadvantages-of-Clean-Architecture"><strong>Disadvantages of Clean Architecture</strong></h2>



<h3 class="wp-block-heading"><strong>Time-consuming</strong></h3>



<p>Implementing such complex architecture requires more time. In my experience, writing code using the Clean Architecture approach requires <strong>about 10% more time </strong>than developing an application without any special architecture.</p>



<h3 class="wp-block-heading"><strong>You need know-how&nbsp;</strong></h3>



<p>There is a <strong>high entry threshold</strong> into this type of approach for people with no prior architectural experience.</p>



<h3 class="wp-block-heading"><strong>A large number of small classes and interfaces</strong></h3>



<p>Some will see this as a disadvantage, and others quite the opposite. Suffice to say that there is a grain of truth in each opinion. In my view, it is an advantage – those with a different opinion find the number of files difficult to manage and the changes made to them unreadable.</p>



<figure class="wp-block-table"><table><tbody><tr><td><br></style><div class="promotion-box promotion-box--image-left "><div class="tiles latest-news-once"><div class="tile"><div class="tile-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2022/05/nearshore_cover.jpg" alt="nearshore cover" title="Getting started with a Clean Architecture solution 9"></div><div class="tile-content"><h3>Project team building. Get to know the practical tips for Scrum Teams.</h3>

<a class="btn btn-primary" href="https://nearshore-it.eu/articles/project-management-leadership/project-team-building/">Read the article</a></div></div></div></div></td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="Advantages-of-Clean-Architecture"><strong>Advantages of Clean Architecture</strong></h2>



<h3 class="wp-block-heading"><strong>Easier maintenance</strong></h3>



<p>Clean Architecture significantly simplifies project maintenance. Fixing and locating bugs with this approach is easier and faster.</p>



<h3 class="wp-block-heading"><strong>Better change management</strong></h3>



<p>The approach <strong>speeds up the introduction of changes </strong>to the project. Thanks to small classes with separate responsibilities, it is very easy to modify the code for new requirements or add new functionalities without worrying about the impact on the rest of the project.</p>



<h3 class="wp-block-heading"><strong>A large number of small classes and interfaces</strong></h3>



<p>As I have already written, there are myriad opinions on this topic.&nbsp;I consider it an advantage because, thanks to many small classes with separate functionalities, the code can be testable &#8211; that is, <strong>easily covered by tests.</strong></p>



<h2 class="wp-block-heading" id="Which-projects-should-I-use-Clean-Architecture-in?"><strong>Which projects should I use Clean Architecture in?</strong></h2>



<p>In my opinion, Clean Architecture works well in <strong>medium-sized to large projects. </strong>In small projects, the complexity of the approach may result in additional work.</p>



<p>But does this mean we shouldn’t use Clean Architecture in small projects? It’s worth remembering that <strong>they develop quickly and naturally. </strong>Deciding to use the CA approach even for smaller projects is justified, in my view. It allows you to <strong>avoid incurring the technological debt</strong> I mentioned in the opening paragraphs, especially when deadlines are not tight.</p>



<h2 class="wp-block-heading"><strong>Summary</strong></h2>



<p>Referring to the concept of sharing two modules between multiple technologies, I think this is a great idea and we are getting closer to its application. So far it has been difficult to utilize its potential, but along with the development of programming languages like Kotlin, we may soon have the first projects that take full advantage of it. I hope I have been able to introduce the main principles of Clean Architecture and encourage you to use it in your projects. A well-considered choice of architecture will allow you to avoid technological debt, and this type of architecture &#8211; despite requiring detailed knowledge and allocating more time for implementation&nbsp;&#8211; undoubtedly works well in the long term in projects both large and small.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/technologies/clean-architecture/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Risks of bad IT architecture</title>
		<link>https://nearshore-it.eu/technologies/risks-of-bad-it-architecture/</link>
					<comments>https://nearshore-it.eu/technologies/risks-of-bad-it-architecture/#respond</comments>
		
		<dc:creator><![CDATA[Paweł Dyrda]]></dc:creator>
		<pubDate>Wed, 05 Aug 2020 08:14:00 +0000</pubDate>
				<category><![CDATA[Technologies]]></category>
		<category><![CDATA[Articles]]></category>
		<category><![CDATA[Software architecture]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/?p=25126</guid>

					<description><![CDATA[The architecture of systems and applications is one of those investments that will be appreciated for years to come. Good and well-thought-out architecture is the foundation that will allow you to avoid unnecessary work and additional costs during the development of an application or a system. Project errors can, over time, turn out to be a barrier to development and a wall that business will bounce off whenever trying to introduce new solutions and applications. Find out how to avoid such problems and when to decide to hire IT architects.]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Go To:</p>
    <ol>
                    <li><a href="#What-is-IT-architecture">1.  What is IT architecture?</a></li>
                    <li><a href="#What-is-systems-and-application-architecture">2.  What is systems and application architecture?</a></li>
                    <li><a href="#System-architecture-problems">3.  System architecture – the most common problems</a></li>
                    <li><a href="#Do-I-need-an-IT-architect">4.  Do I need an IT architect?</a></li>
                    <li><a href="#Summary">5.  Summary</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="What-is-IT-architecture">What is IT architecture?</h2>



<p>Striving to order and simplify is human nature. It is the same in the complex and dynamic IT world. A well-thought-out and ordered architecture allows you to maintain control over the enormous number of elements. But what do we mean by “IT Architecture”?</p>



<p>The concept of architecture covers several areas:</p>



<ul class="wp-block-list">
<li><strong>IT architecture&nbsp;</strong>– this is the broadest term that applies to IT infrastructure, meaning all devices, software, applications, solutions and processes in the company.</li>



<li><strong>Architecture of systems and applications</strong>&nbsp;– defines the way in which software functions in the ecosystem and how it communicates with its other elements. In order to achieve optimal results, the architecture should be created based on an analysis of processes in the organization.</li>



<li><strong>Data architecture&nbsp;</strong>– defines models of collecting, processing, organizing and storing data, as well as the method of managing and integrating this data (ETL processes – Extract, Transform, Load, and ESB – Enterprise Service Buses)</li>



<li><strong>Test architecture&nbsp;</strong>– includes a comprehensive description of the developed software test architecture and the dependencies of modules in the ecosystem, specifying the steps and techniques of testing.</li>



<li><strong>Cybersecurity architecture</strong>&nbsp;– defines standards and best practices for network and system security. It consists of the analysis of network protocols, physical device configuration, anti-virus software, encryption techniques, etc. In order to ensure proper functioning in this area, companies employ people in positions such as IT Security Architect, Security Engineer and Security Software Developers.</li>
</ul>


</style><div class="promotion-box promotion-box--image-left "><div class="tiles latest-news-once"><div class="tile"><div class="tile-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/06/BigCTA_MarekCzachorowski.jpg" alt="BigCTA MarekCzachorowski" title="Risks of bad IT architecture 10"></div><div class="tile-content"><p class="entry-title client-name promotion-box__headline2">Elevate Your Application Development</p>
<p class="promotion-box__description2">Our tailored Application Development services meet your unique business needs. Consult with <strong>Marek Czachorowski</strong>, Head of Data and AI Solutions, for expert guidance.</p>
<a class="btn btn-primary booking" href="https://outlook.office365.com/book/BookameetingwithMarek@gfi.fr/" target="_blank" rel="noopener">Schedule a meeting</a></div></div></div></div>



<h2 class="wp-block-heading" id="What-is-systems-and-application-architecture">What is systems and application architecture?</h2>



<p>In the era of Digital Transformation, companies are increasingly often deciding to implement new solutions. As we know, every project should start with a requirements analysis, which is the absolute basis of any product implementation or launch. Only then it is possible to suggest the optimal architecture.</p>



<p>Since good architecture is the foundation that allows you to build on the potential of an organization, it is worth spending time on a thorough analysis of the requirements. It all starts with the key question: “What is my goal?”. Having a defined goal, we consider how and within what timeframe we want to achieve it, therefore we must ask ourselves:</p>



<ul class="wp-block-list">
<li>How do I want to develop my systems and applications?</li>



<li>Do I plan to implement new solutions, and if so, when?</li>



<li>What are my business needs now and what will they be in 5 or 10 years’ time?</li>



<li>What tasks should the architecture fulfil (e.g. the integration of existing solutions with other applications, the possibility of development, adding new components)</li>



<li>Do I plan to transfer services to the increasingly popular cloud?</li>
</ul>



<p>Good systems and applications architecture is one that fulfils the task which it is designed for. If you have difficulty defining your goal and in turn it prevents you from starting new projects, consult experienced IT architects. Such specialists provide consulting support, carry out individual analysis and build systems using only proven solutions and technologies.</p>



<h2 class="wp-block-heading" id="System-architecture-problems">System architecture – the most common problems</h2>



<ul class="wp-block-list">
<li><strong>The application architecture does not meet the business requirements&nbsp;</strong>– the market is dynamic, and the architecture of the implemented systems and applications should enable continuous development, be flexible, and allow for the use of the most recent technologies. Regardless of whether the company is undergoing a comprehensive transformation or is implementing a single application, a common problem in IT projects is the lack of a defined project goal, and implementation is carried out without an analysis of our needs. The result? Wasting money on a solution that does not pay for itself and does not bring any business value. A good architect will always pay attention to this type of issue, ask for clarification of business requirements and propose the optimal architecture.</li>



<li><strong>The solution is expensive to maintain&nbsp;</strong>– in projects, it may be that everything goes smoothly at the implementation stage, and only with time does the solution turn out not to be scalable. As a result, instead of saving, the company has to invest in expensive equipment. The IT architect creates optimal solutions based on proven technologies and new possibilities, such as the cloud.</li>



<li><strong>Architecture fails to meet safety standards&nbsp;</strong>– “Anything that can go wrong, will go wrong”. Nowhere is this truer than in the case of cybersecurity architecture. Cyberattacks and data leakage can happen to any company, and in 2020 IT security became an important aspect of investments. According to available studies, the threat of cyberattacks is growing by&nbsp;<a href="https://www.computerworld.pl/news/Jak-sie-ustrzec-najczestszych-bledow-w-zarzadzaniu-IT,410518.html" target="_blank" rel="noopener">30%</a>, and cybersecurity audits and tests allow you to minimize this risk.</li>
</ul>



<h2 class="wp-block-heading" id="Do-I-need-an-IT-architect">Do I need an IT architect?</h2>



<p>Architects or IT engineers are specialists with broad competences, and demand for their services is increasing. These professionals are difficult to recruit and their rates are among the highest on the market. No wonder, as IT solutions architects are valuable and the most experienced developers for whom the role of an architect is a natural step in their IT career. Who would not wish to have a specialist who will not only analyze and design the way a given application functions in the system, but also take care of security and help to outline long-term strategy, as part of a project?</p>



<p><strong>Tasks and skills of an IT architect:</strong></p>



<ul class="wp-block-list">
<li>Designing IT systems and supervising the implementation and compliance with security policies</li>



<li>Knowledge of the tools and techniques required to maintain architecture</li>



<li>Analysis of business requirements in cooperation with a business analyst</li>



<li>Business sense and expertise in programming</li>



<li>High-level understanding of IT architecture and business architecture and the ability to build a long-term strategy</li>



<li>Solid foundations of software engineering and support of developers</li>



<li>Knowledge of the latest technological trends and developing technologies</li>



<li>Connecting the past with the future – the architect implements new components and maintains the existing ones, making sure that all the elements work together.</li>



<li>Connecting the world of IT and administration – knowledge of DevOps techniques and tools</li>
</ul>



<h2 class="wp-block-heading" id="Summary">Summary</h2>



<p>A good and well-thought-out architecture of systems and applications is becoming increasingly important, and the dynamic market forces the development of and increased expenditure on new systems and cybersecurity. Investments in these solutions pay off and allow companies to save in the long run. This is the easiest way to minimize the risk of ill-considered implementation.</p>


</style><div class="promotion-box promotion-box--image-left promotion-box--full-width-without-image"><div class="tiles latest-news-once"><div class="tile"><div class="tile-content"><p class="promotion-box__description2"><strong>Consult your project directly with a specialist</strong></p>
<a class="btn btn-primary booking" href="https://outlook.office365.com/book/BookameetingwithMarek@gfi.fr/" target="_blank" rel="noopener">Book a meeting</a></div></div></div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/technologies/risks-of-bad-it-architecture/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
