5

カスタムデバイスとインターフェースする次のアプリケーションがあります。アプリケーションは、デバイスをプログラムするために使用されます。

私のアプリケーションは、デバイスから設定を読み取り、デバイスに設定をプログラムできます。つまり、2 セットの設定です。現在デバイスにある設定の 1 つのセットと、アプリケーションを介してユーザーが入力した設定の 1 つです。

さまざまなデバイス タイプがあり、すべて共通の設定とデバイス固有の設定があります。

完全な設定を備えた 2 つのクラスについて考えていました。どちらもシングルトンを使用しているため、プロジェクト全体ですべての設定に簡単にアクセスできます。しかし、これは正しくありません。この状況に関するヒント

4

3 に答える 3

2

設計パターンではありませんが、おそらくこれを行うでしょう:

// represents a device with it's settings
public class Device
{
   public string Type { get; set;}

   public List<Setting> Settings { get; set; }
}

// represents a setting, agnostic of which device it applies to
public class Setting
{
   public string Setting { get; set; }

   public string Value { get; set; }
}

// represents mapping which devices has which settings
public class DeviceSettings
{
   public List<string> ApplicableDevices { get; set; }

   public List<Settings> ApplicableSettings { get; set; }
}

使用されるコレクションの種類に注目しないでください。そして、より多くのプロパティがあると思います。

この設計を使用して、実行時に設定を定義し、特定のデバイスに割り当てることができます。

于 2012-11-23T03:46:59.637 に答える
0

コマンドパターンを見てください。設定を構成オブジェクトにカプセル化し、コントローラークラスの入力として使用できます。コントローラクラスが適切なパラメータで設定されたらexecute、データを処理するメソッドを呼び出すだけです。

これをStateパターンまたはStrategyパターンと結合して、処理アルゴリズムを切り替えることもできます(たとえば、ある状態では、処理にはデバイスへのデータの送信と、デバイスからのデータの受信が含まれる場合があります)。

于 2012-11-22T13:42:20.530 に答える
0

私はおそらくこれを行うでしょう(私のC#は少し錆びているので、構文が正しいとは思わないでください):

class Settings
{
  Settings parent = null;
  Map<String, String> settings;
  String getSetting(String setting)
  {
    if (settings.contains(setting))
      return settings.get(setting);
    else if (parent != null)
      return parent.getSetting(setting);
    else return null;
  }
}

次に、共通設定は各デバイスの親であり、共通設定には親がありません。

これらのクラスにアクセス/作成する方法は、プロジェクトの構造によって異なります。Map<String, Setting>これらのクラスのセット (おそらくマップ ( )内) を含むシングルトンは、 1 つのアイデアです。

このようにすることの良い点は、子の設定もオプションでその親の設定をオーバーライドできることです。

于 2012-11-23T07:24:11.980 に答える