En términos prácticos, significa usar una costumbre (inmutable) class
sobre uno string
u otro tipo primitivo.
Ejemplos:
- Publicación: Número internacional estándar del libro.
- Finanzas: número de identificación internacional de valores.
Ventajas:
- Puede garantizar el formato de un identificador.
- Se convierte en un miembro de primera clase del modelo.
Desventajas
- Agrega fricción de persistencia (por ejemplo, Entity Framework).
- Más código
Respuestas:
Si puede proporcionar a la clase suficiente funcionalidad útil para justificar la complejidad añadida de no ser una cadena, entonces hágalo. Para identificadores como ISBN e ISIN, sospecho que este no es el caso.
Para que una clase de identificador sea útil, esperaría que se vea así:
Si en cambio se parece más a esto:
Luego abandonaría la clase por completo, usaría cadenas regulares en todas partes y me aseguraría de usar consistentemente "isin" en todos los nombres de variables relevantes.
Tenga en cuenta que, en algunos idiomas, agregar un nuevo tipo casi no tiene "complejidad añadida" en los programas típicos, en cuyo caso se le recomendaría crear el nuevo tipo incluso si no tuviera ninguna funcionalidad. Pero este no es el caso para la mayoría de los lenguajes OOP tradicionales como C ++.
fuente
Yo diría que lo haga. Yo diría que las ventajas son mayores que las desventajas en este caso. Es probable que el código adicional sea bastante mínimo y el problema de persistencia se puede resolver con bastante facilidad al proporcionar algún tipo de convertidor entre su nueva Clase y el tipo que espera la base de datos (nunca he usado Entity Framework pero sé que esto es relativamente indoloro en Hibernar).
Una de las ventajas que puede obtener al definir su propia clase es que el compilador puede asegurarse de que cualquier método que desee un ISBN o un ISIN lo sepa en el momento de la compilación si intenta pasar el valor incorrecto. También será mucho más difícil sobrescribir accidentalmente ese campo en su entidad. Podemos evitar errores comunes como este por completo:
Si ISBN es una clase en lugar de un tipo primitivo, el código anterior ni siquiera se compilará, lo que ahorrará mucho tiempo de depuración más adelante.
fuente