web-dev-qa-db-ja.com

マスターリファレンス-オブジェクトの同期

解決すべきかなり複雑な問題があります。私が構築しているアプリケーションでは、いくつかのオブジェクトがあり、各オブジェクトにはいくつかのパラメーターがあり、それぞれに1つまたは複数の値があります(今のところ単純にして、各パラメーターに1つの値しか持てないようにします)。

これで、パラメータをテンプレートにグループ化できるようになり、オブジェクトを作成/編集するときに、テンプレートを使用して、InDesignのマスターと少し似たオブジェクトをすばやく作成できます。

ここでは、少しわかりやすくするために簡単に説明します。

Model

ここでの問題は、テンプレート(またはマスター)とそのインスタンスの間の関係を管理することです。実際、ある時点で、ユーザーがオブジェクトのパラメーター値をオーバーライドしたい場合や、その逆の場合は、テンプレートを編集したい場合があります。

オブジェクトパラメータが編集されたときにテンプレートと子の関係を解除し、子を持つテンプレートが編集されたときに更新要求でプロンプトを表示することを検討しています。

それは正しい方法ですか?その場合、どのようにしてユーザーにいつ通知すればよいですか?正しい方法でない場合、どのようにしますか?

1
Davide

あなたの質問を理解している限り、単一の答えはありません。しかし、良い答えは、チームが Balsamiq でシンボルを実装した方法に基づいている可能性があります。これをあなたの例に関連付けるには:

オブジェクト==モックアップ
テンプレート==シンボル
パラメータ==オブジェクト
値==オブジェクトのプロパティ

オブジェクトを編集すると、テンプレートの一部として追加されたパラメーターの継承を示すために、背景色が異なります。これらのパラメーターの値を編集する場合、編集された値のみが異なるフォント色になります。

Balsamiqは、他の2つの優れた機能を引き出しました。

  • 未編集の値は、同じパラメーター内の他の値が変更後に失われた場合でも、継承を維持します。
  • 変更を元に戻し、テンプレートから値を再継承するのは簡単です

複数のテンプレートをグループ化して別のテンプレートを構成することもできますが、独立したテンプレートはそのまま残ります。パラメータには通常、複数の値もあります。

詳細については、 シンボルの使用 に関する完全なガイドを参照してください。

1
Joe Dreimann

これはこのフォーラムに完全に関連しているわけではありませんが、解決策に取り組みましょう。

類推で理解する

たとえば、レシピ(最終製品)を作成しようとしていて、オブジェクトが「材料」であり、すべてのオブジェクトのパラメータが「メジャー」であるとします[今のところ、各パラメータには1つの値があると仮定します]。レシピで使用される材料は、その材料のメジャーの「値」です。要約する:

  • オブジェクト==成分
  • パラメータ==成分の測定[tbsp/grams/litres/countの1つ]
  • 値==成分の測定量[塩大さじ半分/水1リットル]

テンプレートがsingleオブジェクトのパラメータを参照すると想定しています。

UI

レシピを準備している間にドラッグ/ドロップすると、定義済みのテンプレートを緑色で表示できます。ユーザーがテンプレートをそのまま選択すると、使用中は常にその色を緑色に保つことができます。ユーザーが既存のテンプレートを変更しようとしたときに、コンポーネントの色を変更し、後で再利用するために保存するようユーザーに要求できます。

実装

各オブジェクトのテンプレートは factory method design pattern として実装できます。この実装の良い例は、Javaの BorderFactory クラスで、境界線やさまざまなパラメーターを作成できます。 Type/Thickness/Shadow-Color/BG-Colorなどのメソッドが提供され、このデザインパターンを通じて具体的な境界が提供されます。

0
A'n' User