Шаблон проектирования для изменения объекта - PullRequest
0 голосов
/ 15 мая 2010

Существует ли шаблон проектирования для поддержки различных объектов перестановок?

Версия 1

public class myOjbect {

  public string field1 { get; set; } /* requirements: max length 20 */
  public int field2 { get; set; }
  . . .
  public decimal field20 { get; set; }
}

Версия 2

public class myObject {

  public string field1 { get; set; } /* requirements: max length 40 */
  public int field2 { get; set; }
  . . .
  public double field20 { get; set; } /* changed data types */
  . . ./* 1 new properties */
  public double field21 { get; set; } 
}

конечно, я мог бы просто иметь отдельные объекты, но подумал, что может быть хороший образец для такого рода вещей.

Ответы [ 3 ]

2 голосов
/ 15 мая 2010

Шаблон проектирования будет называться словарем.

Просто используйте словарь и разрешайте только ключи в зависимости от переменной состояния.

Пример (C #):

class Foo
{
  private Dictionary<String, object> items = new Dictionary<String, object>();
  private Int32 state = 10;

  public void SetField(String field, object value)
  {
    if ((this.FieldAllowedForCurrentState(field)) && (this.IsCorrectTypeForField(field, value)))
    {
      this.items[field] = value;
    }
    else
    {
      throw new InvalidArgumentException("Invalid Key for State");
    }
  }
}

Перегрузка не позволяет изменить тип свойства, и вы получите много разных классов, которые не очень удобны в обслуживании.

В любом случае, я действительно рекомендую проверить, можете ли вы реализовать свои требования, не прибегая к такому подходу.

2 голосов
/ 15 мая 2010

Наследование приходит на ум;)

0 голосов
/ 15 мая 2010

Удаление нового класса MyObjectV2 из MyObject будет работать для изменения поведения field1 и добавления 10 новых полей;
это не позволило бы изменить природу filed200.

...