Clean Architecture

Hľbkový pohľad na clean architektúru a jej vrstvy pre škálovateľné a udržateľné systémy.

Úvad

Architektúra softvéru zohráva kľúčovú úloha pri budovaní škálovateľných, udržateľných a flexibilných systémov. Obľúbený prístup je využitie Clean Architecture (tiež známej ako Onion alebo Hexagonal Architecture). Tento návrh rozdeľuje systém na jasne oddelené vrstvy, každá so svojou zodpovednosťou, čo umožňuje lepšiu organizáciu a dlhodobú udržateľnosť.

Hlavné vrstvy architektúry

Architektúra je rozdelená na štyri hlavné vrstvy:

  • Doménová vrstva (jadro obchodnej logiky)
  • Aplikačná vrstva (sluby a orchestrácia)
  • Inštruktúrna vrstva (prístup k údajom a externým službám)
  • Prezentačná vrstva (užívateľské rozhranie)

1. Doménová vrstva

Doménová vrstva je jadrom systému a obsahuje všetku kľúčovú obchodnú logiku. Táto vrstva je nezávislá od iných vrstiev a obsahuje:

  • Entity: Reprezentujú hlavné objekty (napr. User, Order).
  • Hodnotové objekty: Nemenné objekty reprezentujúce koncepty (napr. Adresa).
  • Doménové služby: Logika, ktorá nepatrí priamo do entity.
  • Rozhrania: Abstraktné repozitáre pre prístup k údajom.
public class Order
{
    public Guid Id { get; private set; }
    public string Customer { get; private set; }
    public List<OrderItem> Items { get; private set; } = new();

    public Order(string customer)
    {
        Id = Guid.NewGuid();
        Customer = customer;
    }

    public void AddItem(OrderItem item)
    {
        Items.Add(item);
    }
}

2. Aplikačná vrstva

Aplikačná vrstva koordinuje operácie medzi doménovou vrstvou a inými vrstvami. Obsahuje služby aplikácie, prípady použitia a validácie business operácií.

public class OrderService
{
    private readonly IOrderRepository _orderRepository;

    public OrderService(IOrderRepository orderRepository)
    {
        _orderRepository = orderRepository;
    }

    public void CreateOrder(string customer, List<OrderItem> items)
    {
        var order = new Order(customer);
        foreach (var item in items)
        {
            order.AddItem(item);
        }
        _orderRepository.Save(order);
    }
}

3. Inštruktúrna vrstva

Inštruktúrna vrstva poskytuje implementácie pre rozhrania definované v doménovéj vrstve. Zahrňa prístup k údajom, integráciu externých API a logovanie.

public class OrderRepository : IOrderRepository
{
    private readonly AppDbContext _context;

    public OrderRepository(AppDbContext context)
    {
        _context = context;
    }

    public void Save(Order order)
    {
        _context.Orders.Add(order);
        _context.SaveChanges();
    }
}

4. Prezentačná vrstva

Prezentačná vrstva spracúva interakciu s užívateľom. Môže zahŕňať webové API, používateľské rozhrania (napr. Blazor alebo MVC) a view modely.

[ApiController]
[Route("api/orders")]
public class OrderController : ControllerBase
{
    private readonly OrderService _orderService;

    public OrderController(OrderService orderService)
    {
        _orderService = orderService;
    }

    [HttpPost]
    public IActionResult CreateOrder([FromBody] OrderDto dto)
    {
        _orderService.CreateOrder(dto.Customer, dto.Items);
        return Ok();
    }
}

Vizuálne znázornie architektúry

Nasledujúcí diagram znázorňuje štruktúiru vrstiev:

+-------------------------------+
|      Prezentačná vrstva       |
|   (UI, Kontroléry, Zobrazenia)   |
+---------------^---------------+
                |
+---------------v---------------+
|      Aplikačná vrstva         |
|   (Služby, Prípady použitia) |
+---------------^---------------+
                |
+---------------v---------------+
|        Doménová vrstva         |
| (Entity, Hodnotové objekty)   |
+---------------^---------------+
                |
+---------------v---------------+
|     Inštruktúrna vrstva       |
| (Repozitáre, Externé služby)  |
+-------------------------------+
            

Výhody tejto architektúry

  • Oddelenie zodpovedností: Každá vrstva má jasnú úloha.
  • Testovateľnosť: Obchodnú logiku je možné testovať samostatne.
  • Udržateľnosť: Jednoduchá údržba a rozšírenie aplikácie.
  • Flexibilita: Zmena infraštruktúry alebo UI neovplyvní doménovú logiku.

Záver

Vrstvená architektúra s doménovou, aplikačnou, inštruktúrnou a prezentačnou vrstvou poskytuje čisté oddelenie zodpovedností. Zabezpečuje škálovateľnosť, udržateľnosť a flexibilitu systému. Izolácia obchodnej logiky v doménovéj vrstve a smerovanie závislostí smerom dovnútra umožňujú vytvoriť robustné riešenie, ktoré vydrží dlhodobo.

Máte projekt? Prvá konzultácia je zadarmo

Či už máte hotové zadanie alebo len nápad - odpoviem vám do 24 hodín.

Kapacita obmedzená: V danom čase aktívne pracujem maximálne na 2 projektoch súčasne, aby som zachoval vysokú kvalitu.

Napísať Email 📞 Zavolať teraz LinkedIn Profil