Como un experimento mental en un proyecto de pasatiempo, he estado pensando en una manera de asegurar que este tipo de error sutil/errata no sucede:enteros de tipo fuerte
public void MyMethod(int useCaseId)
{
// Do something with the useCaseId
}
public void SomeOtherMethod()
{
int userId = 12;
int useCaseId = 15;
MyMethod(userId); // Ooops! Used the wrong value!
}
Este error sería es difícil de encontrar porque no hay un error de tiempo de compilación, y no necesariamente obtendrás una excepción en el tiempo de ejecución. Acabas de obtener "resultados inesperados".
Para resolver esto de una manera simple, he experimentado con el uso de definiciones enum vacías. efectivamente haciendo un identificador de usuario de un tipo de datos (sin ir tan lejos como clase o una estructura):
public enum UseCaseId { // Empty… }
public enum UserId { // Empty… }
public void MyMethod(UseCaseId useCaseId)
{
// Do something with the useCaseId
}
public void SomeOtherMethod()
{
UserId userId = (UserId)12;
UseCaseId useCaseId = (UseCaseId)15;
MyMethod(userId); // Compile error!!
}
¿Qué te parece?
¿Por qué? ¿Ha agregado una cantidad significativa de complejidad para qué? ¿Previene errores tipográficos? Creo que es un poco excesivo codificar a alguien que usa la variable incorrecta. – cthom06
Después de leer su pregunta por segunda vez, me doy cuenta, parece que está tratando de poner una restricción a arg-name. Esto es una muerte excesiva. ¿Por qué alguien querría hacer esto alguna vez? ¿No se supone que el tipo hace el trabajo? –
Es un experimento mental. Estaba pensando en aplicarlo específicamente a los valores clave principales en mi modelo. No estoy proponiendo que todos comencemos a escribir código como este, solo tuve la idea y me pregunté qué pensaría la gente. –