Tenemos un montón de código que pasa sobre "Ids" de filas de datos; estos son en su mayoría ints o guids. Podría hacer que este código sea más seguro al crear una estructura diferente para el ID de cada tabla de base de datos. Luego, el verificador de tipos ayudará a encontrar casos cuando se pase la identificación incorrecta.¿Es una buena idea crear un tipo personalizado para la clave principal de cada tabla de datos?
Por ejemplo, la tabla persona tiene una columna llama PERSONID y tenemos un código como:
DeletePerson(int personId)
DeleteCar(int carId)
¿Sería mejor tener:
struct PersonId
{
private int id;
// GetHashCode etc....
}
DeletePerson(PersionId persionId)
DeleteCar(CarId carId)
Alguien tiene experiencia de la vida real de dong esto?
¿Valen la pena los gastos?
¿O más dolor, entonces vale la pena?
(También haría más fácil para cambiar el tipo de datos en la base de datos de la clave primaria, es mi forma de pensar de este ideal en el primer lugar)
Por favor, no Digo usar un ORM otro cambio importante en el diseño del sistema, ya que sé que un ORM sería una mejor opción, pero eso no está bajo mi control en este momento. Sin embargo, puedo hacer pequeños cambios como los anteriores al módulo en el que estoy trabajando actualmente.
Actualización: cuenta que esto no es una aplicación web y los identificadores se mantiene en la memoria y se pasa alrededor con WCF, por lo que no hay conversión a/de cuerdas en el borde. No hay ninguna razón para que la interfaz WCF no pueda usar el tipo PersonId, etc. El tipo PersonsId, etc., podría incluso usarse en el código UI de WPF/Winforms.
El único bit "sin tipo" del sistema es la base de datos.
Esto parece estar abajo con el costo/beneficio de la escritura de código gasto de tiempo que el compilador puede verificar mejor, o pasar el tiempo escribiendo más pruebas unitarias. Estoy más del lado de pasar el tiempo en las pruebas, ya que me gustaría ver al menos algunas pruebas unitarias en la base de códigos.
¿Cómo le ayudará el verificador de tipos a verificar si se pasa una identificación no válida? Si su código está intentando pasar un GUID donde se espera un int, debe bombardear de todos modos. No estoy seguro de a lo que intente llegar le dará más protección, pero innecesariamente desordenará su código. – Chris
@Chris, lo siento, estoy tratando de atrapar el caso de un CarID que se transfiere a un PersonID cuando ambos están metidos. –