火星探査車シリーズへようこそ。ここでは、次のプラクティスを使用します。
- モノリシックリポジトリ-MonoRepo (モノリシックリポジトリ)
- コマンド/クエリの責任分離-CQRS (読み取りと書き込みの責任分離)
- イベントソーシング-ES (ソースとしてのイベント)
- テスト駆動開発-TDD (テストによる開発)
この入門記事では、ローバーの仕様を簡単に説明します。
ご注意 この例は、 ダラスハッククラブで発表された一連の記事のニーズに適合した演習のバージョンです。
目次
しかし、最初に、上記の用語について簡単に説明します。
モノリシックリポジトリ-MonoRepo (モノリシックリポジトリ)
モノリシックリポジトリは、相互に関連する多くのパッケージを含む単一のバージョン管理されたリポジトリであり、独自のリポジトリに分割できますが、便宜上、1つの場所に格納されます。
このアプローチには、次の利点があります。
- ナビゲーション
- 依存関係管理
- 便利な設定
- テスト実行
ただし、次のような欠点もあります。
- パッケージ間の明確な分離はありません
- スケーリングの制限(ディスクサイズ、帯域幅)
- アクセスを微調整する機能はありません(ユーザーはすべてまたは何も受け取りません)
一緒にパッケージ化/リリースされるプロジェクトに対してこのようなリポジトリを行うことは理にかなっています(ただし、独立したリポジトリはこの可能性を排除しません)
ご注意 モノリシックリポジトリをさらに詳しく調べるためのリンクを次に示します。
コマンド/クエリの責任分離-CQRS (読み取りと書き込みの責任分離)
CQRSは、「書き込み」と「読み取り」のロジックを分離することを目的としており、次のような多くのレベルで適用できます。
- 読み取り専用マイクロサービスと記録マイクロサービス
- エンドポイント/タスクは読み取り専用または書き込み専用
- モデルを2つに分けます(再び、読み取り専用と書き込み専用)
CQRSはプロジェクト内で部分的に適用することもできることに注意することが重要です。CQRSは、本当に意味がある場合にのみ使用してください。
ご注意 CQRSに関するリンクを次に示します。
- コマンド/クエリの責任分離
- Cqrs
- RをCQSに追加する:いくつかのストレージオプション
- CQRSを明確化
- CQRS / ESの機能基盤
- メッセージングフレーバー
- 泥を避ける
- DDDをCQRSと間違えないでください。 ええ、どこから始めますか?
- CQRS / ES
- CQRSによるボトルネックとの戦い
イベントソーシング-ES (ソースとしてのイベント)
ESでは 、重要なアクションはそれぞれ「イベント」として記録されます。 このようなイベントを追跡すると、次の利点があります。
- 特定の瞬間にアプリケーションの状態を再作成するイベントの再生(ロールバック、繰り返し、同期)
- 最終状態の分析(2つのオプションの比較、または誰が、何を、いつ行ったかの検索)
CQRSと同様に、プロジェクトでESを_部分的に適用することもできることに注意することが重要です。必要な場合にのみ使用してください。
ESは多くの場合CQRSに関連付けられていますが 、個別に使用できます。
ご注意 ESに関するリンクを次に示します。
- ログを使用して強固なデータインフラストラクチャを構築するか、二重書き込みが悪い考えである理由
- イベントソーシング
- 実用的なイベントソーシング
- CQRS / ES
- CQRSによるボトルネックとの戦い
- CQRS / ESの機能基盤
- ブロードウェイチームとの出会い-DDD、CQRS、イベントソーシングの話
テスト駆動開発-TDD (テストによる開発)
TDDは3つのステップで要約できます。
- テストを作成する
- テストに合格するのに十分なコードを記述します(迅速かつ汚い、または単に「機能させる」)
- コードリファクタリング(クリーンな「適切に動作する」作成)
コードの前にテストを書くと、将来のコードがどのように使用されるかを考えるようになります。 仕様を作成するようなものですが、設計、ドキュメント開発、自動回帰テストという3つの目標を同時に設定します。
このアプローチにより、簡単に高いコードカバレッジを実現できます(厳密には、成功したパスだけでなく、可能なすべてのコードパスをチェックする必要があります)。
ご注意 TDDに関するリンクを次に示します。
- ストローマンTDD
- カバレッジ!!!
- 「Intro to TDD」の失敗
- TDD、実装の詳細のテストを避ける
- 一夫一婦のTDD
- TDDが機能しない場合
- TDDは本当に良いデザインにつながりますか?
- TDDは死んでいる、長期にわたるテスト
- TDDとは何か
- すべてがうまくいかなかったTDD
- TDDと複雑さ
- TDDをあきらめる
仕様書
このシリーズの目標は、次の仕様に従ってローバーソフトウェアを作成することです。
ローバーは最初に所定の位置に着陸する必要があります。 位置は、座標(
X
および
Y
、整数)および方向(文字列値
north
、
east
、
west
または
south
)で構成されます。
このすべての後、彼は
move_forward
(方向を維持するが
x
または
y
軸に沿って移動する)または
turn_left
/
turn_right
(同じ座標を維持するが方向を変える)などの指示で乗ることができます。
時々、現在の位置を報告します(再び、
x
と
y
座標と向き)。
たとえば、ローバーが
north
23、42に着陸し、その後、2回前進し、その後左に移動してから再び前進する指示を受け取ったとします。 座標が要求されると、彼は
44
、
west
を報告します。
タスクを分解する
上記の仕様から、少なくとも3つのユースケースを特定できます。
- ローバーを火星に着陸させる
- 運転中
- ロケーションリクエスト
次は何ですか
次の記事では、プロジェクトとその最初のパッケージ
navigation
を作成します。
ご注意 以下を使用します。
次のパート: ローバー、初期化