シンプルなテーブル プロジェクト

標準 Mixin 構造

モデル内の各コンポーネントには標準の Mixin 構造が使用されています。各コンポーネントは 3 つの主要 Mixin (UI Mixin、 ルール Mixin、 グラフィックス Mixin)に分けられます。これにより、ビジネス ロジック( ルール Mixin)をユーザ インタフェース(UI Mixin)およびグラフィックス(グラフィックス Mixin)から分離することができます。通常、UI は ルール Mixin で指定された一部の既定値をオーバーライドするため、ここでは Mixin の順序が重要になります。テーブル、テーブル トップ、および脚の デザイン は次のように定義されます。

Design Table : TableDesigns TableUI TableRules TableGraphics
Design TableTop : TableTopDesigns TableTopUI TableTopRules TableTopGraphics
Design Leg : LegDesigns LegUI LegRules LegGraphics

TableDesigns、TableTopDesigns、LegDesigns は単なる組織 Mixin です。この中には実際のルールはありません。デザインを上記の構造に分離するのが優れた Intent プログラミング法です。この構造を使用すると、Intent で利用できる複数の強力な継承機能の使用が促進されるだけでなく、構造化された方法によってユーザがより簡単にデザイン構造にオブジェクトの構成を実装することができます。

既定値

通常、ルールの既定値はルール自体の値でしかありませんが、変更した値はルールの動的な値に格納されます。ただし、UI ツールの UI プロパティは、Intent モデルの別個の UIProperty パーツによってコントロールされます。このパーツは、既定値と Intent モデルで使用される実際の値の仲介役として機能します。これは、プロパティ(値、選択項目など)のすべての UI ロジックをUIProperty デザインでカプセル化できるようにするために行われます。実際の動的な値は、ビジネス ルール ではなく UI プロパティ パーツに格納され、ビジネス ルール は単に UI プロパティの Value ルールを参照します。開発者は、単に値を UIProperty パーツの DefaultValue パラメータに渡すことができます。

また、ルールの既定値を定義するための簡易的な方法もあります。この方法では、既定値のルールの先頭に "dv" を付け、関連する UI プロパティ パーツには "ui" を付ける必要があります。たとえば、テーブルのデザインには Length ルールがあり、既定値は dvLength ルールに格納されます。uiLength という名前の の UI プロパティテーブルに追加すると、uiLength プロパティでは、DefaultValue ルール の値に dvLength ルールの値を使用するようになります。この方法を使用する際の注意点として、UI プロパティは UIProperty デザインの拡張機能である BasicUIProperty から派生している必要があります。

通常、 ルール Mixin には既定値の定義が格納されており、これらの既定値を使用するビジネス ロジック ルールは単に ルール Mixin のパス スルーになります。前の例の場合、Length は単に ルール Mixin の dvLength の値を返します。

   Parameter Rule dvLength As Number = 60.0
   Rule Length As Number = dvLength

ただし、UI Mixin では、ビジネス ロジック ルールは UI プロパティの Value ルールを参照します。このルールは UI ツールによってユーザが指定する値であるためです。

Rule Length As Number = uiLength.Value

既定値とパス スルー ルールを ルール Mixin に入れ、UI Mixin の UI プロパティにつなぐと、各種 UI Mixin を空のデザインでオーバーライドするだけで、UI ツールを使用せずに必要に応じて UI を無効化したり、モデルを実行することができるようになります。これは、実際の UI が必要ない場合のバッチ処理や、UI ロジックを完全に切断する必要がある場合のデバッグで役立ちます。

シンプルなテーブル プロジェクトのデザイン

テーブル トップ

テーブル トップのデザインは、長さ、幅、厚さを持つ単純な長方形のブロックです。これらはすべてデザイン上のパラメータで、上記の標準構造を使用します。

   Parameter Rule dvLength As Number = 60.0
   Rule Length As Number = dvLength
   
   Parameter Rule dvWidth As Number = 24.0
   Rule Width As Number = dvWidth

   Parameter Rule dvThickness As Number = 1.0
   Rule Thickness As Number = dvThickness

TableTopGraphics デザインは、ブロックで混合され、テーブル トップの厚さになるようにブロックの高さのルールを単純にオーバーライドします。

Rule Height As Number = Thickness

[脚]

脚の デザインも単純な長方形のブロックです。ただし、高さのみを持ちます。

   Parameter Rule dvWidth As Number = 1.0
   Rule Width As Number = dvWidth
   
   Parameter Rule dvHeight As Number = 24.0
   Rule Height As Number = dvHeight

LegGraphics デザインもブロックで混合されますが、脚の になるようにブロックのルールをオーバーライドします。これは脚を正方形にするためです。

Rule Length As Number = Width

テーブル

テーブル アセンブリには、テーブル トップと 4 つの脚が含まれています。テーブルの全高、長さ、幅など、モデル全体の最上位パラメータも格納されています。

   Parameter Rule dvHeight As Number = 24
   Rule Height As Number = dvHeight
	
   Parameter Rule dvLength As Number = 60
   Rule Length As Number = dvLength
	
   Parameter Rule dvWidth As Number = 24
   Rule Width As Number = dvWidth

テーブル トップでは、テーブル アセンブリから渡された長さと幅の既定値を取得します。同様に、各脚では高さの既定値をテーブル アセンブリから取得します。

   Child TableTop As :TableTop
      dvLength = length
      dvWidth = Width
   End Child

   Child Leg As :Leg, Quantity = 4
      dvHeight = LegHeight
   End Child