Марсохід, Введення



Ласкаво просимо в серію статтею «Марсохід», де ми будемо використовувати наступні практики:

  • Monolithic Repositories — MonoRepo (Монолітні репозиторії)
  • Command/Query Responsibility Segregation CQRS (Сегрегація відповідальності на читання і запис)
  • Event Sourcing — ES (Події як джерело)
  • Test Driven Development — TDD (Розробка через тестування)
У цій вступній статті ми просто позначимо специфікації нашого марсохода.

Примітка. Цей приклад є адаптованою для потреб серії статей версією вправи, представленого на Dallas Hack Club, який зараз, на жаль, лежить.

Але спочатку давайте коротко пройдемося по згаданим вище термінів.

Monolithic Repositories — MonoRepo (Монолітні репозиторії)
Монолітний сховище являє собою єдине версионированное сховище, що містить безліч пакетів, пов'язаних один з одним, мають можливість бути розділеними на власні репозиторії, але з причин зручності складені в одному місці.

Цей підхід дає нам наступні переваги:

  • навігація
  • управління залежностями
  • зручність налаштування
  • виконання тестів
Однак, він також приносить і наступні недоліки:

  • немає жорсткого поділу між пакетами
  • обмеження по масштабуванню (розмір на диску, пропускна здатність)
  • відсутня можливість точкового налаштування доступів (користувач одержує все або нічого)
Такі репозиторії має сенс робити для проектів, які будуть упаковані / випущені разом (хоча і самостійні репозиторії не виключають такої можливості)

Примітка. Ось кілька посилань для додаткового знайомства з монолітними репозиторіями:

Command/Query Responsibility Segregation CQRS (Сегрегація відповідальності на читання і запис)
CQRS — це про поділ логіки «записи» і «читання», і її можна застосовувати на багатьох рівнях, наприклад:

  • read-only микросервисы і микросервисы на запис
  • кінцеві точки/завдання тільки для читання або тільки для запису
  • поділ ваших моделей на дві (знову ж таки, тільки для читання і тільки для запису)
Важливо відзначити, що CQRS також може бути частково застосований в рамках проекту: використовуйте його тільки коли це дійсно має сенс.

Примітка. Ось кілька посилань про CQRS:

Event Sourcing — ES (Події як джерело)
З ES кожна значуща дія записується як «подія». Відстеження таких подій забезпечує наступні переваги:

  • відтворення подій для відтворення стану програми на конкретний момент (відкат, повтор, синхронізація)
  • аналіз останнього прийшов стану (порівняння двох варіантів або пошук хто, що і коли зробив)
Як і з CQRS, важливо відзначити, що ES також може бути застосований _частично_ у проекті: використовуйте його тільки коли є необхідність.

ES часто асоціюється з CQRS, але вони можуть використовуватися окремо.

Примітка. ось кілька посилань про ES:

Test Driven Development — TDD (Розробка через тестування)
TDD можна звести до трьох кроків:

  1. створити тест
  2. написати код, щоб пройти тест (швидкого і брудного, або просто «змусити працювати»)
  3. рефакторинг коду (створення чистого, «правильно працює»)
Написання тестів до коду змушує нас замислитися про те, як майбутній код використовувався б. Це як писати специфікації, але відразу з трьома цілями: проектування, розробка документації і автоматизована регресійна перевірка.

Такий підхід дозволяє легко мати високу покриття коду (хоча, строго кажучи, все одно потрібно перевіряти всі можливі шляхи коду, не тільки успішні).

Примітка. ось кілька посилань про TDD:

Специфікації
Мета цієї серії полягає у створенні програмного забезпечення марсоходу, згідно наступним специфікаціям:

Марсохід повинен буде спочатку приземлитися в заданому положенні. Положення складається з координат (
X
та
Y
, що є цілими числами) і орієнтації (значення рядка
north
,
east
,
west
або
south
).

Після всього цього він зможе їздити з допомогою інструкцій, таких як
move_forward
(зберігаючи орієнтацію, але рухаючись по осі
x
або
y
) або
turn_left
/
turn_right
(зберігаючи ті ж координати, але змінюючи орієнтацію).

Час від часу, він буде повідомляти поточне місце розташування (знову ж
x
та
y
координати і орієнтацію).

Наприклад, ровер може приземлився на
23
,
42
,
north
і потім отримати інструкції рухатися вперед двічі, потім ліворуч, а потім знову вперед. Коли будуть запитані координати, він повідомить
22
,
44
,
west
.

Декомпозируем завдання
З наведених вище характеристик, можна виявити як мінімум три варіанти використання:

  1. Посадка ровера на Марс
  2. Водіння
  3. Запит розташування
далі
У наступній статті ми створимо проект і його перший пакет:
navigation
.

Примітка. Ми будемо використовувати:

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.