<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Victor Hugo Grabowski Beltramini</title>
    <description>The latest articles on DEV Community by Victor Hugo Grabowski Beltramini (@vhbeltramini).</description>
    <link>https://dev.to/vhbeltramini</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F819542%2Fe8d5008c-70a6-40c4-bce1-78f073c3345d.jpeg</url>
      <title>DEV Community: Victor Hugo Grabowski Beltramini</title>
      <link>https://dev.to/vhbeltramini</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vhbeltramini"/>
    <language>en</language>
    <item>
      <title>Introduction to Message Brokers</title>
      <dc:creator>Victor Hugo Grabowski Beltramini</dc:creator>
      <pubDate>Wed, 09 Mar 2022 01:40:30 +0000</pubDate>
      <link>https://dev.to/vhbeltramini/introduction-to-message-brokers-295k</link>
      <guid>https://dev.to/vhbeltramini/introduction-to-message-brokers-295k</guid>
      <description>&lt;h2&gt;
  
  
  Key definitions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A key feature used in many software designs and architecture are the messages brokers. A message broker is a cross-application communication technology that helps build common integration mechanisms to support cloud-native, microservices-based, serverless, and hybrid cloud architectures. &lt;/li&gt;
&lt;li&gt;Message Brokers enable the programmers to build applications, systems and services to communicate with each other and exchange information. On that same process they can validate, store, route, and deliver messages to the appropriate destinations.&lt;/li&gt;
&lt;li&gt;To provide reliability they often rely on message queue structures where they store the massages in order until they are fully consumed by the application. So they will normally follow a FIFO(&lt;strong&gt;F&lt;/strong&gt;irst &lt;strong&gt;I&lt;/strong&gt;n &lt;strong&gt;F&lt;/strong&gt;irst &lt;strong&gt;O&lt;/strong&gt;ut) method to organize and process the queue in order to process all messages that are in the queue&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Message broker models
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Peer-to-peer messaging
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;This is the distribution pattern used in message queues with a one-to-one relationship between the sender and the consumer of the message. Each message in the queue is sent to only one recipient and processed only once. This method is used when the message only had to be executed once

&lt;ul&gt;
&lt;li&gt;A good example for this messaging pattern is a payroll/financial transaction processing. In these kinds of systems, both senders and receivers need a guarantee that each payment will be only be process once.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Publish/subscribe messaging
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In this message distribution pattern, commonly referred to as "pub/sub", works with the idea that each message is published to a topic, and all the multiple message consumers that are subscribed to the topic will/want to receive those messages. All messages published on a topic will be distributed to all subscribed applications. This is basically a broadcast distribution method where we have a one-to-many relationship between the publisher of a message and its consumer.

&lt;ul&gt;
&lt;li&gt;A good scenario and example where we can use this kind of message distribution pattern will be in an airline company where they will have to release updated information about the flights, and that information could be used by multiple systems since ground crew performing aircraft maintenance, refueling, baggage handlers, flight attendants, pilots preparing the aircraft for the flight, operator visual displays to inform the public, and many others possibles systems &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8ZdWwAUq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.cloudamqp.com/img/blog/exchanges-topic-fanout-direct.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8ZdWwAUq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.cloudamqp.com/img/blog/exchanges-topic-fanout-direct.png" width="880" height="537"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Here we have a more basic visual example of how does work those mainly used message broker models&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Data Structures: Introduction to Trees</title>
      <dc:creator>Victor Hugo Grabowski Beltramini</dc:creator>
      <pubDate>Wed, 09 Mar 2022 01:21:25 +0000</pubDate>
      <link>https://dev.to/vhbeltramini/data-structures-introduction-to-trees-5d8h</link>
      <guid>https://dev.to/vhbeltramini/data-structures-introduction-to-trees-5d8h</guid>
      <description>&lt;p&gt;So first of all Trees are a data structure that is used to store data in a hierarchical format, so trees are not a linear data structure. We can define a tree also as a collection of nodes where each node will contain a data value and a link to others child node. &lt;br&gt;
In trees we do not store data in sequence, trees will store the data in multiples levels and multiples nodes. &lt;/p&gt;

&lt;h2&gt;
  
  
  Important terminologies
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Root &lt;br&gt;
In the trees the first node will always be the &lt;strong&gt;Root Node&lt;/strong&gt;. Every tree will have one and only one root node, we also can say that the root is the origin in this kind of data structure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Edge&lt;br&gt;
All links between the nodes of the tree will be called as &lt;strong&gt;Edge&lt;/strong&gt;, and in a tree with 'N' number of nodes will always have a maximum of 'N-1' number of edges.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Parent&lt;br&gt;
The predecessor of any node is always called as &lt;strong&gt;Parent Node&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Child&lt;br&gt;
The descendant of any node is called as &lt;strong&gt;Child Node&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Siblings&lt;br&gt;
All nodes that have the same Parent are called as &lt;strong&gt;Siblings&lt;/strong&gt;, in other word all nodes with same parent are called Sibling nodes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leaf&lt;br&gt;
All nodes that doesn't have a child node are called as &lt;strong&gt;Leaf Node&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Software Architecture &amp; Software Design</title>
      <dc:creator>Victor Hugo Grabowski Beltramini</dc:creator>
      <pubDate>Tue, 22 Feb 2022 16:18:55 +0000</pubDate>
      <link>https://dev.to/vhbeltramini/software-architecture-software-design-26hk</link>
      <guid>https://dev.to/vhbeltramini/software-architecture-software-design-26hk</guid>
      <description>&lt;h1&gt;
  
  
  Software Architecture
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Fundamental organization of a system, or the way the highest level components are wired together.&lt;/li&gt;
&lt;li&gt;It's how you organize your softwares components to then be more easily maintainable and to be easy to add new features &lt;/li&gt;
&lt;li&gt;Design decisions that need to be made early in a project&lt;/li&gt;
&lt;li&gt;“Architecture is about the important stuff. Whatever that is” - Ralph Johnson.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An architect has to be able to recognize what elements are important, recognizing what elements are likely to result in serious problems should they not be controlled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hexagonal(Ports &amp;amp; Adapters) Architecture
&lt;/h2&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MTcjeiuM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1200/1%2ALF3qzk0dgk9kfnplYYKv4Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MTcjeiuM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1200/1%2ALF3qzk0dgk9kfnplYYKv4Q.png" alt="Hexagonal Architecture example image" width="880" height="822"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The main idea when using this architecture is to isolate our business logic, to do that we can use ports and adapters to have request send to our core of the application.&lt;/li&gt;
&lt;li&gt;A simple example is when you will have a system and your account can be created from a few different places like an API or the system interface, but both will end up in the same main business logic of the application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Primary adapters are the entry point of our application like a http request, an API or some other type of application. than the data will pass our core bussines logic and will pass throw to some other external mechanism that will be our driven Adapter that coulbe a database, a message queue etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Most used/known software architectures.
&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
&lt;a href="http://alistair.cockburn.us/Hexagonal+architecture"&gt;Hexagonal Architecture&lt;/a&gt; (a.k.a. Ports and Adapters) by Alistair Cockburn and adopted by Steve Freeman, and Nat Pryce in their wonderful book &lt;a href="http://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627"&gt;Growing Object Oriented Software&lt;/a&gt;
&lt;/li&gt;
  &lt;li&gt;
&lt;a href="http://jeffreypalermo.com/blog/the-onion-architecture-part-1/"&gt;Onion Architecture&lt;/a&gt; by Jeffrey Palermo&lt;/li&gt;
  &lt;li&gt;
&lt;a href="http://blog.cleancoders.com/2011-09-30-Screaming-Architecture"&gt;Screaming Architecture&lt;/a&gt; from a blog of mine last year&lt;/li&gt;
  &lt;li&gt;
&lt;a href="http://www.amazon.com/Lean-Architecture-Agile-Software-Development/dp/0470684208/"&gt;DCI&lt;/a&gt; from James Coplien, and Trygve Reenskaug.&lt;/li&gt;
  &lt;li&gt;
&lt;a href="http://www.amazon.com/Object-Oriented-Software-Engineering-Approach/dp/0201544350"&gt;BCE&lt;/a&gt; by Ivar Jacobson from his book &lt;em&gt;Object Oriented Software Engineering: A Use-Case Driven Approach&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Clean Architecture
&lt;/h2&gt;

&lt;p&gt; 
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UMYkExQT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.cleancoder.com/uncle-bob/images/2012-08-13-the-clean-architecture/CleanArchitecture.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UMYkExQT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.cleancoder.com/uncle-bob/images/2012-08-13-the-clean-architecture/CleanArchitecture.jpg" alt="" width="772" height="567"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Entities
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Entities encapsulate the business rule. So it can be a set of data structures and functions or a object with methods, it does't really matter as long as the entities could be used by many different applications in the enterprise.&lt;/li&gt;
&lt;li&gt;They are the least likely part of the system that will change when something external changes, so no operational change to any particular application should affect the entity layer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Use Cases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;This layer will be responsible for application-specific business rules. &lt;/li&gt;
&lt;li&gt;It encapsulates and implements all of the use cases of the system. This will coordinate the data flow to and from the entities, and direct those entities to use their business rules to achieve the goals of the use case.&lt;/li&gt;
&lt;li&gt;We also expect tha this layer will not be affected by exertnal changes like database, UI or other frameworks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Interface Adapters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;This layer is a set of adapters that convert data from the format most convenient for the use cases and entities, to the format most convenient for some external agency such as the Database or the Web. &lt;/li&gt;
&lt;li&gt;For example this layer will contain all the MVC architecture of a GUI &lt;/li&gt;
&lt;li&gt;This layer will be responsable to convert the data from the form most convenient for entities and use cases, into the form most convenient for whatever persistence framework is being used. All the SQL related stuffs should be restricted to this layer too.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Frameworks and Drivers / Outermost layer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;This layer is generally composed of frameworks and tools for example the Database, the Web Framework, etc. Normaly you will not write much code here other than make the conections for the code communicates to the next circle inwards.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Specifics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The main concern on the clean architecture is the separation of concerns. You can achieve that by dividing the software into layers, each has at least one layer for business rules, and another for interfaces.&lt;/li&gt;
&lt;li&gt;Some get there the software will have to be 

&lt;ul&gt;
&lt;li&gt;Independent of Frameworks. The architecture does not depend on the existence of some library of feature laden software. This allows you to use such frameworks as tools, rather than having to cram your system into their limited constraints.&lt;/li&gt;
&lt;li&gt;Testable. The business rules can be tested without the UI, Database, Web Server, or any other external element.&lt;/li&gt;
&lt;li&gt;Independent of UI. The UI can change easily, without changing the rest of the system. A Web UI could be replaced with a console UI, for example, without changing the business rules.&lt;/li&gt;
&lt;li&gt;Independent of Database. You can swap out Oracle or SQL Server, for Mongo, BigTable, CouchDB, or something else. Your business rules are not bound to the database.&lt;/li&gt;
&lt;li&gt;Independent of any external agency. In fact your business rules simply don’t know anything at all about the outside world. &lt;a href="https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html"&gt;source/credits&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Software Design
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Software design is the process in the development which creates a specification of a software artifact, intended to accomplish goals.&lt;/li&gt;
&lt;li&gt;Software design usually involves problem solving and planning a software solution. This includes both low-level component and algorithm design and high-level, architecture design.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Software Design is importante because it focus on the specification of software artifact that will help to developers to implement the software following the pattern and so maintaining a more organized development&lt;/p&gt;

&lt;h1&gt;
  
  
  Questions
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Main diferences between Software architecture and Software design&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecture: A higher vision about the system. Focus on the fundamental structures of the system.&lt;/li&gt;
&lt;li&gt;Design: Low level view of the system. Focus on the specification of software artifact which will help to developers to implement the software.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  References:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Who Needs an Architect? - &lt;a href="https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf"&gt;https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Architecture - &lt;a href="https://martinfowler.com/architecture/"&gt;https://martinfowler.com/architecture/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The Clean Code Blog / The Clean Architecture - &lt;a href="https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html"&gt;https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>programming</category>
      <category>software</category>
      <category>codequality</category>
    </item>
    <item>
      <title>Solid Principles</title>
      <dc:creator>Victor Hugo Grabowski Beltramini</dc:creator>
      <pubDate>Mon, 21 Feb 2022 23:28:35 +0000</pubDate>
      <link>https://dev.to/vhbeltramini/solid-principles-2582</link>
      <guid>https://dev.to/vhbeltramini/solid-principles-2582</guid>
      <description>&lt;ul&gt;
&lt;li&gt;SOLID

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;S&lt;/strong&gt;ingle Responsibility Principle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O&lt;/strong&gt;pen Closed Principle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;L&lt;/strong&gt;iskov Substitution Principle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I&lt;/strong&gt;nterface Segregation Principle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;D&lt;/strong&gt;ependency Inversion Principle&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;S&lt;/strong&gt;ingle Responsibility Principle
&lt;/h1&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uOAhzx0L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://exceptionnotfound.net/content/images/2015/03/singleresponsibilityprinciple.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uOAhzx0L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://exceptionnotfound.net/content/images/2015/03/singleresponsibilityprinciple.jpg" width="750" height="600"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Each class should be responsible for a single part or functionality of the system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Benefits 

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Testing&lt;/strong&gt; – A class with one responsibility will have far fewer test cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lower coupling&lt;/strong&gt; – Less functionality in a single class will have fewer dependencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organization&lt;/strong&gt; – Smaller, well-organized classes are easier to search than monolithic ones.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;O&lt;/strong&gt;pen Closed Principle
&lt;/h1&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5PtzO73J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://exceptionnotfound.net/content/images/2015/03/openclosedprinciple.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5PtzO73J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://exceptionnotfound.net/content/images/2015/03/openclosedprinciple.jpg" width="750" height="600"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Software components should be open for extension, but not for modification&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Benefits

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Less Bugs&lt;/strong&gt; - We stop ourselves from modifying existing code and causing potential new bugs in other parts of the system that could be using that part of code that we modify &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;L&lt;/strong&gt;iskov Substitution Principle
&lt;/h1&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y0j3mbIu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://exceptionnotfound.net/content/images/2015/03/liskovsubstitutionprinciple.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y0j3mbIu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://exceptionnotfound.net/content/images/2015/03/liskovsubstitutionprinciple.jpg" width="750" height="600"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Objects of a superclass should be replaceable with objects of its subclasses without breaking the system. In other words the Liskov Substitution Principle (LSP) applies to inheritance hierarchies such that derived classes must be completely substitutable for their base classes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Benefits

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Code re-usability&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduced coupling&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easier maintenance&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;I&lt;/strong&gt;nterface Segregation Principle
&lt;/h1&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MH8WiCP_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://exceptionnotfound.net/content/images/2015/03/interfacesegregationprinciple.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MH8WiCP_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://exceptionnotfound.net/content/images/2015/03/interfacesegregationprinciple.jpg" width="750" height="600"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;No client should be forced to depend on methods that it does not use. In other words you should not use a hierarchie of a classe that you do not need all of his propriets or methods. To do that larger interfaces should be split into smaller ones. So, we can ensure that implementing classes only need to be concerned about the methods that are of interest to them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Benefits 

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Readability and Maintainability&lt;/strong&gt; of the code because we reduce our classes implementation only to required actions that we need without any additional or unnecessary code.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;D&lt;/strong&gt;ependency Inversion Principle
&lt;/h1&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U9Vx9Sj7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.exceptionnotfound.net/content/images/2015/03/dependencyinversionprinciple.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U9Vx9Sj7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.exceptionnotfound.net/content/images/2015/03/dependencyinversionprinciple.jpg" width="750" height="600"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;High-level modules should not depend on low-level modules, both should depend on abstractions. Our code should depend on abstractions (interfaces and abstract classes) instead of concrete implementations (classes). The abstractions should not depend on details; instead, the details should depend on abstractions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Benefits 

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility and Stability&lt;/strong&gt; at the level of the entire architecture&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;A Solid Guide to SOLID Principles - &lt;a href="https://www.baeldung.com/solid-principles"&gt;https://www.baeldung.com/solid-principles&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;What are the SOLID principles in Java? - &lt;a href="https://www.educative.io/edpresso/what-are-the-solid-principles-in-java"&gt;https://www.educative.io/edpresso/what-are-the-solid-principles-in-java&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;SOLID in C#: The Single Responsibility Principle - &lt;a href="https://exceptionnotfound.net/simply-solid-the-single-responsibility-principle/"&gt;https://exceptionnotfound.net/simply-solid-the-single-responsibility-principle/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
