как бы вы разработали "государство / управление", которое будет делать это - PullRequest
0 голосов
/ 14 сентября 2009

У меня есть список целых чисел, которые можно обнулять, и это выглядит как отношение 1 ко многим

 id1 can have an id2 and id3
 id2 can have id4

если значение id1 изменяется, id2 и id3 должны быть равны нулю, а это значит, что id4 должно быть равно нулю

В этом примере я использую только 4 переменные, так что ими легко управлять.

На данный момент у меня есть как минимум 15 переменных для управления.

То, как я сейчас думаю сделать это, находится в свойстве «set», проверяющем, изменяется ли значение, и, если это так, устанавливает дочернее значение в null. Это станет кошмаром позже, если отношения изменятся, и кошмаром для обслуживания.

Есть ли более простой / лучший способ, чем я только что сказал?

Ответы [ 2 ]

1 голос
/ 15 сентября 2009

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

0 голосов
/ 15 сентября 2009

Вот то, что я думаю, у вас сейчас:

public class Ids
{
    public int? Id1
    {
        get { return _id1; }
        set
        {
            if (_id1 != value)
            {
                _id1 = value;
                Id2 = null;
                Id3 = null;
            }
        }
    }

    public int? Id2
    {
        get { return _id2; }
        set
        {
            if (_id2 != value)
            {
                _id2 = value;
                Id4 = null;
            }
        }
    }

    public int? Id3 { get; set; }
    public int? Id4 { get; set; }

    private int? _id1;
    private int? _id2;
}

А вот одна альтернатива:

public class Id
{
    public Id(int? value)
    {
        _value = value;
    }

    public void AddChild(Id child)
    {
        _children.Add(child);
    }

    public IEnumerable<Id> Children
    {
        get { return _children; }
    }

    public int? Value
    {
        get { return _value; }
        set
        {
            if (_value != value)
            {
                _value = value;

                foreach (Id id in Children)
                {
                    id.Value = null;
                }
            }
        }
    }

    public override string ToString()
    {
        return Value.ToString();
    }

    private readonly List<Id> _children = new List<Id>();
    private int? _value;
}

Используется следующим образом:

var id1 = new Id(1);
var id2 = new Id(2);
var id3 = new Id(3);
var id4 = new Id(4);

id1.AddChild(id2);
id1.AddChild(id3);

id2.AddChild(id4);

Обратите внимание, что вы можете добавить их в общий список .

Я провел только базовое тестирование по этому вопросу, и существует множество альтернатив (а также способов обеспечения синтаксического сахара для упрощения инициализации). Возможно, другие предложат лучшие проекты; надеюсь, это точно описывает вашу проблему.

РЕДАКТИРОВАТЬ: Это попытка ответить на вопрос, как было задано; однако это поможет лучше понять проблему, которую вы пытаетесь решить. Например, что представляют собой обнуляемые идентификаторы и почему один идентификатор является дочерним по отношению к другому? Включена ли база данных?

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