Data Modelingについて
This article summarize the content of Pega Academy LSA course in Japanese. Please refer the below link for original article in English.
https://academy.pega.com/module/designing-data-model/v2/in/20031/20601
Pega AcademyのLead System ArchitectのData Modeling->Designing the data modelの章を参考にして ポリモーフィズムを考慮したデータモデリングについて記載します。 学習用にメモしたものなので、誤りがあればコメントで指摘をお願いします。
シナリオ:
車両保険会社が見積もり用に異なる車両タイプ(一般車、トラック、オートバイなど)のリストを取り扱っています。 これらの車両タイプにより、ビジネスルールやプロセスが異なります。
データモデリング: 上記のシナリオで以下の3つのデータモデリングが考えられます。
その①:
車両タイプ毎にデータタイプを用意する。(Data-Vehicle-Car、Data-Vehicle-Truck、Data-Vehicle-Otherの3つのテーブルで管理する)車両タイプ毎に静的なPageを持つ。Pageが異なるので開発者はPage毎に異なるユーザーインターフェースを用意する
その②:
車両タイプ全体で1つのデータタイプを用意する。(すべてData-Vehicleのテーブルで管理される) 車両タイプ毎にビジネスロジックが異なる点は条件分岐のロジックや車両タイプ毎のcircumstanceを設けることで対応する。
その③:
車両タイプ全体で1つのデータタイプを用意する。(すべてData-Vehicleのテーブルで管理される) 一般車両はData-Vehicle-Car、トラックはData-Vehicle-TruckなどそれぞれData-Vehicleを継承したクラスを用意し、それぞれのビジネスロジックを反映した内容でData-Vehicleに定義されているData TransformやActivityをオーバーライドする。全車両Data-Vehicleで管理されているがRun time実行時に車両タイプに合わせそれぞれのオブジェクトクラスを書き換える。(※ 実現例は下記参照) 設計時では1つのクラスを参照し、実行時に動的に参照クラスを変更する事をPegaではDynamic Class Referencing(DCR)と呼んでいる。これを利用することでポリモーフィズムを実現する。
・その③について拡張性の観点から推薦されている。新しい車両タイプが増えた場合に簡単に拡張できる。(Typeの選択肢に新しい車両を追加し、新しい車両用のクラスを用意する。)
・その①については新しい車両タイプが増えた場合に関連する全てdata typeやUIなどに修正を入れる必要があり薦められていない。
・その②についてはビジネスルールが複雑になるとロジックが複雑になり保守性が乏しく薦められていない。
※DCR 実現例
Data-VehicleクラスにpxObjectClassを指定するLoadVehicleDCRというDataTransformを用意する。一般車のPageを呼び出す際は変数TypeにCarを指定しLoadVehicleDCRを実行するとPageのオブジェクトクラスにData-Vehicle-Carが設定できる。(下の画像ではクラスがData-VehicleではなくFSG-Sample-Data-Vehicleと記載されている点については無視してください。)
このDataTransformは画面入力のリフレッシュやDataPageのdata soruceで呼び出す。