p389
最終目標がCONTINUOUS INTEGRATION による完全な1つのコンテキストへの併合だとしても、まずはSHARED KERNEL から始めなさい
ステップ1 | 初期の状況を評価しろ 2つのコンテキストが個々の内部で、ちゃんとまとまっているか確かめなさい。 |
ステップ2 | プロセスを決めなさい。 どのようにコードを共有されるべきか?モジュールのネーミングは?等、共有コードが作成される前に決めねばならない。 少なくともテストを含め、SHARED KERNELコードの週に一度の統合については決めなさい。 |
ステップ3 | コンテキスト間で重複している(しかし、コアドメインではない)小さなサブドメインから始めなさい 最初の併合はプロセスを確立する事である。(だから、単純で影響の少ない箇所から始めた方が良い。) 既に統合され、変換されているものを試しなさい。 |
同じようなサブドメインを扱う場面に入ったら、次の3つのアプローチがある。つまり
ステップ4 | 2-4人の開発者からなるグループを形成し、サブドメインに対して共有モデルが機能する様に両チームから結論を得なさい。 この作業には、同音異義語の特定や変換されていない用語のマッピングを含む。 |
ステップ5 | どちらかのチームの開発者にモデルの実装(又は、共有されるべき既存コードのadapting)を行わせなさい。 もし、開発者らがモデルに関して困難に直面したら、再びチームを召集し、ステップ3からやり直しなさい。 |
ステップ6 | 個々のチームに新しいSHARED KERNELへの統合を行わせなさい。 |
ステップ7 | 不必要となったTranslationを除きなさい |
この段階までくると、とても小さなSHARED KERNELがあるはずです。
後続のイテレーションではステップ3〜ステップ7を繰り返しなさい。
プロセスが固まり、チームが自信をようになるにつれて、より複雑で、CORE DOMAINに近いSubdomainを複数、同時に扱えるようになるでしょう。
NOTE:
2つのモデルが異なる専門的な領域向け場面に遭遇するかもしれない。そんな時は、SHARED KERNELへの併合は延期しなさい。
SHARED KERNELの利点はSEPARETE WAYSの利点が修正されている間、CONTINUOUS INTEGRATIONの利点を保持できる事である。
SHARED KERNELが拡大していった時、BOUND CONTEXTSの完全な統合の誘惑にかられるかもしれない。
それは、チーム構成と、使用していた言葉を完全に変えることになる。
そんな時は、人々とチームを準備させる事から始めなさい。
ステップ1 | CONTINUOUS INTEGRATIONの為の全てのプロセス(Shared Codeの所有権や統合の頻度など)が 個々のチームに認識されている事を確認しなさい |
ステップ2 | チーム間のメンバーを循環させなさい。 両モデルを理解する人間を作る事にるながります。 |
ステップ3 | 個々のモデルの純度を高めなさい(CHAPTER15参照) |
ここまでの段階で、CORE DomainをShared Kernelに統合する事に対して十分な自信があるべきである。
ステップ4 | 一度、CoreDomain?への統合を始めたら、出来る限りの範囲で、素早く行いなさい。 この作業は最もオーバヘッドが高いフェーズであり、エラーを起こしやいからである。 |
ステップ5 | SHARED KERNELが成熟するにつれて、統合頻度を日時に変えていき、最終的にCONTINUOUS INTEGRATIONへの統合なさい。 |
ステップ6 | SHARED KERNELが以前のBOUND CONTEXTSを包括するにつれて、2つのチームが、1つの大きなチームか、 以前より小さなメンバーの入れ替えが頻繁に行えるような2つチームになっているだろう。 |
ステップ1 | 1回のIteratrionで移行が行えるレガシーの機能を特定しなさい。 一回のイテレーションで終わらなくても、小さい機能で、短いイテレーションで行える事を考えなさい。 |
ステップ2 | ANTICORPORATION LAYERに要求される追加要件を特定しなさい'' |
ステップ3 | 実装 |
ステップ4 | 導入 色々なパターンがあるが、普通はより大きな組織的なリリースを考慮する必要がある。 ユーザーは新しいソフトウェアの訓練を受けるべきである。 |
ステップ5 | ANTICORPORATION LAYERに不要な部分の特定と除去 |
ステップ6 | レガシーシステムから不要なモデルの除去を考える。 レガシーシステムの設計が良いほど、移行は簡単である。 設計が悪いと、分解も大変である。 全てを切り替えが終わるまで、不要な部分を無視する事は可能かもしれない。 |
この作業を繰り返す事で、レガシーシステムは次第に業務から切り離されていくはずである。
一方で、ANTICORPORATION LAYERは小さくなっていく。
その場しのぎ通信プロトコルで、他システムと連携していると
そんな時は、PUBLISHED LANGUAGEを用い、正式な手順を経てシステム間の関係を構築する必要があるでしょう。
ステップ1 | 業界標準として使われている言語が存在するならば、それを評価し、可能な限り使いなさい |
ステップ2 | ステップ1が駄目なら、ホスト(15章参照)のように機能するシステムのCORE Domainに磨きをかけなさい。 |
ステップ3 | XMLのような交換可能かつ標準的なParadigmを使う時は、可能な限り、交換可能な言語の土台として、CORE DOMAINを使いなさい。 |
ステップ4 | 新しい言語を公開しなさい。 |
ステップ5 | もし、新システムの構造が含まれているならば、一緒に公開しなさい |
ステップ6 | 連携する個々のシステムの為に、translation layerを構築しなさい。 |
ステップ7 | 切り替えなさい |
しかし・・・
ということで・・・