マルチパラダイムデザインとは

December 03, 2020

BaHo Advent Calendar 2020 3 日目担当の BaHo 猫 です。

今日はマルチパラダイムデザインについての話を自分なりの解釈でざっくり話します。 システム設計っぽい話です。

マルチパラダイムデザイン

マルチパラダイムデザインはその名前の通り、特定のパラダイムに縛られずメタ的にプロダクトを設計するための手法です。

例えば、事前に開発で Java を利用されることが確定していれば Java の言語仕様に沿った設計や実装することが確定します。 汎用的な挙動を持つ関数を作って使いまわしたい場合、Java では抽象クラスにその関数を定義して利用する可能性のある他クラスに継承する選択肢があります。 仮に C で実装するとしたらどうでしょう。定義ファイルに関数を追加して必要な箇所で適宜読み込めば使えそうです。 この情報だけみれば C の方が使いやすそうですが、Java にも使いやすいコンテキストが存在します。

共通の構造と振る舞いを持つオブジェクトを作りたい場合はどうでしょう。 Java はクラスとしてそれらの共通性をまとめてかける機能を包含しています。 一方、C のような構造と振る舞いを 1 つのオブジェクトとして定義する足掛かりがない言語ではそれを定義するのに骨が折れそうです。

このように、言語(パラダイム)の使いやすさは場面によって左右します。 言語と言いましたが、言語は何かしらのパラダイムをもとに実装されているので同じパラダイムであれば別言語でも場面ごとの使いやすさは類似します。 例えば、JavaScript はクラスベースのオブジェクトパラダイムをサポートしているので、先ほどの Java のような記法が実現できます。

マルチパラダイムデザインでは、パラダイムの決定を遅延させて設計を進めることで後に見えてくる実装に対して適切なパラダイムを決定することを目標としています。 しかし設計する際、使用する予定の言語パラダイムを用いてドメインを形作る手法は一般的と言えます。 パラダイムを持たないマルチパラダイムデザインではどのように設計するのでしょうか。

どうやって設計するのか

マルチパラダイムデザインの世界では、共通性と可変性を使って設計します。

共通性と可変性とは、物事の属性をグループ化するために使われるツールの 1 つです。 プロダクト開発では、そのプロダクトの属性を切り取り、ドメインとして形作るために使われたりします。

共通性と可変性はほとんどのパラダイムが持つ主要な特性です。 これらを用いて設計することで実装段階までパラダイムの決定を避け、より適切なパラダイム選択が行えます。 すごいですね。

まとめ

マルチパラダイムデザインは、共通性と可変性を用いてパラダイムに縛られない設計をするよ。

最後に=

仕事が終わってから日付が変わるまでの数時間で文章を書くことはとても難しいです。 ネタも当日考えてるので毎回薄い記事で申し訳ない。

ついでに

記事のトップに Twitter で呟くボタンを追加しました!

是非、記事をシェアして私の知名度をあげてください。