BaHo Advent Calendar 2020 4 日目担当の BaHo 猫 です。
今日はBaHo Advent Calendar 3 日目 の最後に話した共通性と可変性を用いたシステムの分析手法についてお話ししていきます。
共通性と可変性のおさらい
共通性と可変性とは、物事の属性をグループ化するために使われるツールの 1 つです。 プロダクト開発では、そのプロダクトの属性を切り取り、ドメインとして形作るために使われたりします。
共通性分析
多くの設計では始めに、プロダクトのドメインを切り出し定式化する必要があります。 共通性分析は、共通性を定式化するためのツールとして用いることでドメインを定式化します。
始めに、プロダクトで使われる語彙まとめて辞書を作成します。 語彙はプロダクト内で普遍的に使われる単語で、その言葉がプロダクトに対して何らかの意味を持つことを示します。 それをまとめることでいわゆるドメイン辞書、プロダクトの共通言語基盤ができます。
語彙はファミリと呼ばれる類似のエンティティや概念をグルーピングしたものと紐付き、単一のアプリケーションに閉じない拡張性や再利用可能性を持つのです。 具体的に、語彙は構造やシグネチャ、型、ユースケースの傾向を示すものになります。
可変性分析
共通性がプロダクトの骨格だとすれば、可変性は血肉だと表現されています。 共通性の中で実際にアプリケーションとして動的に動くである場所を見つけ、表現されるであろう幅を同定します。
可変性は共通性とは表裏一体です。 例えば、「同様のインターフェースを提供するロジック」は「異なるロジックを持つインターフェース」という側面を持つ場合があります。
ソートのインターフェースを想定してみましょう。 インターフェースとしては Array を入力すると整列された Array が返ってきます。 一方で、内部のロジックはバブルソートやボゴソートといった実装になっていてもインターフェースに影響はありません。 どれか 1 つの手法で十分であれば可変しませんが、仮に場合によって使うソートを使い分けたいと考えた場合、ロジックが可変性として取り上げられます。
このように、可変性分析では共通性分析で得た共通性を軸にどこが可変になるかという視点で分析を進めるのです。