継承の操作 – 時間と精神を節約! | Mendix

メインコンテンツへスキップ

継承を活用することで、時間と精神を節約できます。

複数のエンティティをモデル化したときに、それらが非常に似ていて、多くの属性が共通していることに気づいたことはありませんか? 継承を使用すると、時間を節約し、プロジェクトの保守性を高めることができます。この記事では、継承とは何か、そして継承を最も効果的に使用する方法について説明します。

基本的な理解

まず、以下に示す新しく作成されたドメイン モデルから始めましょう。ご覧のとおり、エンティティ間で共有される属性が多数あります。

エンティティ

ここで、Name、Year、NumberOfPassengers の 3 つの属性を複製します。これらの 3 つの属性は Car エンティティと Boat エンティティ間で共通なので、新しいエンティティ (Vehicle と呼ぶ) に移動できます。この新しいエンティティを「一般化された」エンティティとして使用します。Vehicle エンティティを作成したら、Car エンティティと Boat エンティティを開いて、一般化として Vehicle を選択することで、一般化を簡単に設定できます。

集合一般化

この関係を設定したので、私の車とボートのエンティティ (「特殊」エンティティ) は、すべての車両の属性にアクセスできるようになりました。これにより、車とボートの名前を設定し、それを 1 か所で管理できます。ただし、これは私の車両がボートと車の属性にアクセスできることを意味するわけではないことに注意してください。これは一方向の関係です。

特殊なエンティティの作成

前のセクションでは、ドメイン モデルを設定し、Vehicle エンティティを作成して継承関係を設定しました。ここで、エンティティを作成できるようにする必要があります。これを行うには、次の 2 つの一般的な方法があります。

  1. 車両の専門分野ごとにボタンを1つ作成します
  2. 車両に専門分野を指定するボタンを1つ作成します

最初のオプションは実装が最も簡単ですが、最高のユーザー エクスペリエンスは提供されません。その実装の UI は次のとおりです。

UI オプション 1

これらの各ボタンは、車両、車、またはボートのいずれかの特殊なオブジェクトを作成する非常に類似したマイクロフローを呼び出します (車やボート以外の車両 (バイクなど) も作成できることに注意してください)。

この方法は非常にシンプルですが、多くの冗長なマイクロフローとボタンがあります。10 個の専門分野があり、10 個のボタンが 10 個の異なるマイクロフローを呼び出すと想像してください。これでは混乱して乱雑なページが作成されます。

ここでオプション 2 が興味深いものになります。

オプション-2

ボタンが 1 つだけなので、このページははるかに見やすくなります。このボタンは、一般化された Vehicle エンティティを作成し、そのページから、作成する専門分野を選択できます。

車種

車両タイプを選択したら、「次へ」をクリックして特殊なエンティティを作成します。

ここから、適切な特殊エンティティを作成し、関連する詳細をコピーするのは簡単です。ただし、重複したデータやダーティなデータを作成しないように、一般化されたエンティティ (車両) を必ず削除してください。エンティティが作成されたので、車両を表示および管理する方法が必要です。

表示と管理

車両のリストを表示および管理する簡単な方法の 1 つは、リスト ビューを使用することです。これは、各専門分野ごとに異なるテンプレートを設定できるため、継承を使用する場合に特に便利です。

template

テンプレートを使用すると、複雑なページを作成する必要がなくなり、ボートや車に固有の情報を 1 か所に表示できます。また、一部のタイプに特化し、他のタイプには特化しないようにすることもできます。特定のテンプレートが作成されていないすべての特化では、「既定のテンプレート」が使用されます。

これらのアイテムを表示できるようになったので、編集ボタンと削除ボタンを作成する必要があります。その際には、継承も考慮し、再利用性を最適化する必要があります。ボートは乗り物でもあるため、ボートの編集ボタンと削除ボタンにはボートまたは乗り物のいずれかのパラメータを設定できます。ただし、乗り物パラメータのみを使用すると、3つのエンティティすべてで再利用できます。編集時には、継承分割を使用する必要があります。

緑のダイヤモンドは継承の分割です。分割を実行した後、該当する場合は、Vehicle を特殊化されたエンティティにキャストする必要があります。これを実行すると、エンティティを特殊化されたバージョンとして使い始めることができます。削除の場合、継承の分割を行う必要はありません。エンティティを削除するので、特殊化されたバージョンは関係ありません。Boat を削除するか Car を削除するかは関係なく、単に削除するだけです。

これは学ぶべき良い教訓ですが、理解するのは難しいかもしれません。特殊化されたバージョンを使用する必要がない限り、つまり特殊化されたエンティティのフィールドを編集したり、特殊化されたバージョンを必要とするページを表示したりする場合を除き、継承スプリットを実行する必要はありません。

データ グリッドとテンプレート グリッドは、上記の編集機能をネイティブでサポートしています。リスト ビューでテンプレートを設定する方法と同様に、デフォルトの [編集] ボタンを使用して、専門分野のページを選択できます。

編集ページ

データ グリッド、テンプレート グリッド、リスト ビューの通常のトレードオフに加えて、継承固有のトレードオフも発生するようになりました。リスト ビューでは特定のデータを表示できますが、より多くのロジックを管理する必要があります。データ グリッドとテンプレート グリッドの場合、プラットフォームがロジックの一部を管理しますが、汎用エンティティに保存されている情報しか表示できません。

特殊化を使用してエンティティを作成および管理する方法について説明しましたので、実際に試してみてください。継承の使用には長所と短所があることを覚えておいてください。使用する前に、これらを必ず比較検討してください。一般的な経験則をいくつか紹介します。

  1. パフォーマンスの問題が発生する可能性があるため、継承を 2 層以上使用しないでください。
  2. 継承は論理的な場所でのみ使用してください。建物、車、人物があり、それらすべてに名前、年齢、住所のフィールドがある場合、それらを一般化されたエンティティに取り出すと混乱が生じる可能性があります。

言語を選択してください