JavaOpt: Паттерны

JavaOpt: Паттерны


Основные

  1. SOLID
    S - Single Responsibility Principle - интерфейсы, классы и методы должны выполнять только 1 задачу и делать это хорошо!
    O - Open-Close Principle - методы, классы и интерфейсы должны быть открыты для расширения, но не для изменения. В особенности это касается публичных библиотек с множеством внешних зависимостей
    L - Liskov Substitution Principle - принцип в основе которого лежит заменяемость родительского класса любым его наследником. Иными словами, там где возможно, следует использовать максимально базовую абстракцию
    I - Interface Segregfation Principle - принцип согласно которому интерфейсы следует разбивать на множество мелких, с более узконаправленными функциями. Реализация будет зависеть уже от класса.
    D - Dependency Invertion Principle - классы не должны зависеть от конкретных реализаций, только от абстракций. Так, вставка (передача) в класс зависимостей должна представлять собой только абстракции
  2. DRY - Don’t Repeat Yourself - следует избегать дублирования кода
  3. KISS - Keep It Simple, Stupid - написание кода должно быть максимально просты, чтобы понимание было интуитивным
  4. TDD - Test-Driven Development - принцип разработки, при котором наложение тестов идет несколько опережающими темпами относительно реализации задачи.

12 Factor app

  1. Codebase. В VCS должно лежать все что так или иначе связано с приложением (чтобы оно заработало). К нему должны иметь доступ все заинтересованные лица + CI/CD
  2. Depencencies. Хранение артефактов в VCS запрещено. В контроле версий должно лежать только уникальная и необходимая для проекта база
  3. Configurations. Параметры приложения следует выносить из кода в переменные окружения или конфигурационные файлы
  4. Backing Services. Внешние для приложения сервисы должны быть отделены от него и максимально абстрагированы. Поддержку предпочтительнее переносить на другую команду (речь про БД, почтовые сервисы, стриминговые сервисы и прочие)
  5. Build, Release, Run. Принцип, согласно которому приложение каждый раз собирается, поставляется и запускается “с нуля”.
  6. Process. Процессы в рамках приложения должны быть атомарны с наименьшим количеством взаимозависимостей. Например, с 1 внешним ресурсом работает 1 сервис и он же выполняет все необходимые действия, предоставляя сервис
  7. Port Binding. Каждому сервису выделяется отдельный сетевой порт, который дополнительно идентифицирует сервис
  8. Concurrency. Сервис в рамках приложения должен быть легко масштабируемым как в сторону увеличения, так и в сторону уменьшения
  9. Disposability. Приложение/сервис сам должен следить за корректностью старта. Если он получил статус успешно запущенного - это значит лишь одно - он гарантированно работает на 100%
  10. Dev/Prod Parity. Окружение/контура работы (dev и prod) должны быть идентичными. Допускаются минорные различия и различия в масштабировании
  11. Logs. Логи должны быть максимально разбиты и сгруппированы по целевым группам их читателей (например, только логи с ошибками, только HTTP запрос/ответ, только работа с БД и т.д.)
  12. Admin Process. Ключевые участки работы всего приложения носят максимальный приоритет (даже если зависят от внешних ресурсов и сервисов). Их всегда следует рассматривать как ключевой элемент системы!
 Comments
Comment plugin failed to load
Loading comment plugin