Clean Architecture — to podejście do projektowania złożonych systemów programowych, zapewniające niezależność logiki biznesowej od frameworków, baz danych, interfejsu użytkownika oraz innych czynników zewnętrznych. W jego podstawie leży podział kodu na warstwy, między którymi możliwe jest minimalne wzajemne oddziaływanie.
W klasycznej Clean Architecture widzimy wewnętrzne warstwy (Use Cases, Entities) i zewnętrzne (Frameworks, Gateways, Controllers). Przemieszczanie zależności odbywa się tylko do wewnątrz (inwersja zależności), co pozwala na łatwe dostosowywanie, modyfikowanie i testowanie systemów bez ryzyka naruszenia krytycznej logiki biznesowej.
Przykład kodu (w Pythonie):
# Entity class Order: def __init__(self, id, total): self.id = id self.total = total # Use case class CompleteOrderUseCase: def __init__(self, order_repository): self.order_repository = order_repository def execute(self, order_id): order = self.order_repository.get_by_id(order_id) order.completed = True self.order_repository.save(order)
Kluczowe cechy:
Czy wszystkie warstwy Clean Architecture mogą być implementowane jako oddzielne usługi?
Nie jest to konieczne. Czasami izolacja każdej warstwy w osobnej usłudze nie jest opłacalna z powodu wysokiej powiązania lub kosztów komunikacji. Warstwy to logiczny podział, fizyczna izolacja jest potrzebna tylko w uzasadnionej potrzebie.
Czy można łamać zasady kierunkowości zależności w Clean Architecture, jeśli przyspiesza to rozwój?
Nie, ponieważ nawet krótkotrwałe oszczędności czasu prowadzą do utrudnienia wsparcia w przyszłości. Kierunkowość zależności to podstawowa zasada Clean Architecture i jej naruszenie prowadzi do utraty korzyści struktury.
Czy zasady biznesowe zawsze muszą być realizowane wyłącznie na wewnętrznej warstwie?
Tak, wszystkie ważne zasady biznesowe powinny znajdować się w wewnętrznej warstwie (Entities lub Use Cases), aby zmiana zależności zewnętrznych nie wpływała na logikę biznesową.