У нас есть много кода, который передает о "Идентификаторах" строк данных; это в основном ints или guids. Я могу сделать этот код более безопасным, создав другую структуру для идентификатора каждой таблицы базы данных. Затем средство проверки типов поможет найти случаи, когда передается неправильный идентификатор.
Например, таблица Person имеет столбец, вызывающий PersonId, и у нас есть код типа:
DeletePerson(int personId)
DeleteCar(int carId)
Было бы лучше иметь:
struct PersonId
{
private int id;
// GetHashCode etc....
}
DeletePerson(PersionId persionId)
DeleteCar(CarId carId)
-
Кто-нибудь получил реальный жизненный опыт dong это?
-
Стоит ли накладные расходы?
-
Или больше боли, чем это стоит?
(Это также облегчило бы изменение типа данных в базе данных первичного ключа, то есть, в первую очередь, я думал об этом идеале)
Пожалуйста, не говорите, используйте ORM какое-то другое большое изменение в дизайне системы, поскольку я знаю, что ORM будет лучшим вариантом, но в настоящее время это не под моей властью. Однако я могу внести незначительные изменения, как указано выше, в модуль, над которым я сейчас работаю.
Update: Обратите внимание, что это не веб-приложение, и идентификаторы хранятся в памяти и передаются с WCF, поэтому нет никакого преобразования в/из строк на краю. Нет никакой причины, по которой интерфейс WCF не может использовать тип PersonId и т.д. Тип PeopleId и т.д. Может даже использоваться в коде интерфейса WPF/Winforms.
Единственным по своей сути "нетипизированным" битом системы является база данных.
Похоже, что это связано с затратами/затратами на время написания кода, который компилятор может проверить лучше, или потратить время на создание дополнительных модульных тестов. Я больше склоняюсь к тому, чтобы тратить время на тестирование, поскольку мне хотелось бы увидеть хотя бы некоторые модульные тесты в базе кода.