DEV Community

Part 1: What is Clean Architecture?

mohamed Tayel on July 03, 2024

Understanding Clean Architecture I would like to express my gratitude to Gill Cleeren, Pluralsight Author, for his excellent course on A...
Collapse
 
mkunikow profile image
Michal Kunikowski

There is also hexagon architecture. Maybe you can compere.
I can add one article for reference (sorry for medium)

"Hexagonal Architecture, there are always two sides to every story"
medium.com/ssense-tech/hexagonal-a...

jmgarridopaz.github.io/content/art...

Collapse
 
litlyx profile image
Antonio | CEO at Litlyx.com

MVVM, Clean architeture is a standard for very large and complex code bases that need a structure. I used when i was a enloyee in a big company. I rember that the barrier was really big for a person who is not a "at his prime" so sometimes scares the people. But is the optimal solution for large scale codebases.
Good work.
Antonio, CEO at Litlyx

Collapse
 
moh_moh701 profile image
mohamed Tayel

thanks

Collapse
 
hlexnc profile image
HlexNC

Can you next time provide an example of project with clean architecture? Thanks.

Collapse
 
moh_moh701 profile image
mohamed Tayel

example using .net core API
github.com/mohamedtayel1980/clean-...

Collapse
 
moh_moh701 profile image
mohamed Tayel

soon

Collapse
 
naviny0 profile image
Navin Yadav

ok

Collapse
 
james_mcmenamin_5ac505935 profile image
James McMenamin

For mobile and large codebase I have switched to a Vertical architecture + clean design approach nowadays just easier to manage the base.

Collapse
 
aliadelnour profile image
Ali Nour Al Din

منور يا هندسة💕

Collapse
 
nehemiahj profile image
Nehemiah Jeyakumar

Great article

Collapse
 
moh_moh701 profile image
mohamed Tayel

thanks

Collapse
 
z2lai profile image
Info Comment hidden by post author - thread only accessible via permalink
z2lai • Edited

Your diagram looks more like rectangles instead of circles 😀. I've always wondered, is there an actual difference in what the circlular clean architecture diagrams depict vs the non-circular diagrams?

FYI, if your article was assisted by AI, you should disclose that or tag it appropriately.
dev.to/devteam/guidelines-for-ai-a...

Collapse
 
ahmedagamy profile image
Top Developers

Thanks for this great article but I have some questions that need to clarify.

1- Entities: Represent the core business objects of the application. They encapsulate the most general and high-level rules. They are typically rich domain objects containing business rules and logic.
I believe entities shouldn't have any business logic and if you need to have some validation rules we can keep it in use cases or in a helper class to validate data before saving, is that right ?

2- User interface: Include the UI, database, web frameworks, and any other external tools or delivery mechanisms. These are the outermost layer and have the least amount of code.
the user interface layer is just part of the framework & drivers layer and this layer includes (DB - Devices - Web - UI - External Interfaces).

Collapse
 
marcello_h profile image
Marcelloh

How would a business rule be applied on an entity-field (if the only way is in)?

Collapse
 
moh_moh701 profile image
mohamed Tayel

Let's say we have an entity called order and i want make sure when set quantity it must >0 we will do the following
public class Order
{
public int Quantity { get; private set; }

public void SetQuantity(int quantity)
{
    if (quantity <= 0)
    {
        throw new ArgumentException("Quantity must be greater than zero.");
    }
    Quantity = quantity;
}
Enter fullscreen mode Exit fullscreen mode

}
as you see the i make private set and create method for validate the quantity
This encapsulates the business rule within the entity, making it easier to maintain and understand

Collapse
 
marcello_h profile image
Marcelloh

In that case, the business rule is "hidden" in the entity, which is not in the Application Core.

Thread Thread
 
moh_moh701 profile image
mohamed Tayel

sorry, I misunderstood your question. To clarify, we can add business rule in APP core

public interface IOrderService
{
void SetOrderQuantity(Order order, int quantity);
}

// Application Core - Service Implementation
public class OrderService : IOrderService
{
public void SetOrderQuantity(Order order, int quantity)
{
if (quantity <= 0)
{
throw new ArgumentException("Quantity must be greater than zero.");
}
order.SetQuantity(quantity);
}
}

Collapse
 
adesoji1 profile image
Adesoji1

This is rich

Collapse
 
moh_moh701 profile image
mohamed Tayel

thanks

Some comments have been hidden by the post's author - find out more