Предположим, вам нужно сохранить некоторые значения в таблице, состоящей из нескольких столбцов (например, реляционной базы данных): например, int
для первого столбца, string
для второго, DateTime
длятретий и т. д.
Если один или несколько столбцов подобны первичному ключу, то мы можем использовать IDictionary
, чей Key
будет набором полей, которые действуют как первичный ключ.Остальные поля представляют Value
.В этом случае я мог бы создать один или два класса / структуры.Например, если первичный ключ является просто существующим типом, нам нужно будет только создать класс / структуру, подобную следующей:
public class MyValue
{
public int Field1;
public double Field2;
public string Field3;
}
Словарь может быть Dictionary<int, MyValue>
, тогда как таблица может бытьследующее.
public class MyTable
{
private Dictionary<int, MyValue> _table;
...
}
Очевидно, что в зависимости от предметной области могут быть диапазоны и / или правила действия для вышеуказанных полей: например, Field1
может быть положительным и т. д...
В качестве первой альтернативы я мог бы спроектировать класс MyValue
, чтобы он выдавал некоторые исключения для выявления "нарушения правил".Но, возможно, этот подход может быть чрезмерным, особенно если класс MyValue
используется только внутренне для MyTable
: в этом случае я бы написал код, подобный следующему, и обработал бы ошибку достоверности в MyTable
классе: то есть MyTable
класс проверяет поля данных перед вставкой их в словарь, поэтому MyValue
будет "глупым" классом ...
namespace MyNamespace
{
class MyValue
{
// only public fields
}
public class MyTable
{
private Dictionary<int, MyValue> _table;
...
public void Add(int key, int field1, double field2, string field3)
{
// some code to check validity range for fields
...
}
}
}
Правильно ли это решение?Или мне следует избегать такого подхода?Должен ли я всегда определять класс / структуру полностью (обработка исключений, Equals
, GetHashCode
методы?