0nliner / archtool

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

DEV настройка среды

  1. Добавить библиотеку в PYTHONPATH
export PYTHONPATH="${PYTHONPATH}:путь до archtool"
  1. Поставить зависимости
python3.10 -m virtualenv venv
source venv/bin/activate
pip install -r dev_requirements.txt
  1. Собрать пакет
make sdist


Установка


pip install archtool



Введение в библиотеку archtool

Фичи

  • Реализует паттерн Dependency Injection
  • Следит за тем, чтобы импорт в рамках слоёв был однонаправленным
  • Обязывает разработчиков соблюдать принцип сегрегации интерфейсов

Примеры

  • Пример монолита
  • Пример микросервиса
  • Пример ETL приложения
  • Пример бота

Что такое слой

Разделение приложения на слои позволяет достичь более высокой степени модульности и улучшить его поддержку, расширяемость и добиться низкой связанности в коде. Каждый слой выполняет определенную функцию и имеет свои собственные интерфейсы, что упрощает работу над отдельными компонентами приложения и позволяет изменять их без влияния на другие части системы.

Библиотека предоставляет вам стандартные слои и интерфейсы в соответствии с чистой архитектурой Мартина Фаулера.

class InfrastructureLayer(Layer):
    """
    Слой инфраструктуры
    """
    depends_on = None


    class Components:
        repos = ComponentPattern(module_name_regex="repos",
                                 superclass=ABCRepo)


class DomainLayer(Layer):
    """
    Слой бизнеслогики
    """
    depends_on = InfrastructureLayer


    class Components:
        services = ComponentPattern(module_name_regex="services",
                                    superclass=ABCService)


class ApplicationLayer(Layer):
    """
    Слой приложения
    """
    depends_on = DomainLayer


    class Components:
        controllers = ComponentPattern(module_name_regex="controllers",
                                       superclass=ABCController)


class PresentationLayer(Layer):
    """
    Слой отображения
    """
    depends_on = ApplicationLayer or DomainLayer


    class Components:
        views = ComponentPattern(module_name_regex="views",
                                 superclass=ABCView)

В данном случае определяются 4 слоя:

  • Infrastructure
  • Domain
  • Application (необязательный слой)
  • Presentation

Библиотека не ограничивает вас только чистой архитектурой, к примеру вы можете реализовать ETL архитектуру

Преимущества использования слоёв

  • Уменьшает связанность между компонентами системы
  • Способствует повышению безопасности приложения, поскольку каждый слой может иметь свои собственные механизмы защиты.
  • Упрощает тестируемость, за счёт возможности изолированно тестировать логику.
  • Повышает читаемость и простоту написания кода, методы становятся меньше по объёму, т.к логика разделена.
  • Способствует соблюдению принципа DRY за счёт чёткой структуры приложения

About


Languages

Language:Python 99.3%Language:Makefile 0.7%