c# - tipos - ¿Cómo encaja System.Convert en las convenciones OO?
funciones de conversion de tipos en c# (5)
En C # no puedes crear métodos fuera de clases o estructuras. Entonces, cuando desee crear métodos de utilidad, es mejor almacenarlos en una clase estática.
Así que diría que no hay nada orientado a objetos sobre una clase estática.
¿No se supone que las clases deben llamarse por objetos y no por acciones? Simplemente no se sienta junto con la teoría OO que aprendí.
Un pensamiento fue que, dado que Convert tiene solo métodos estáticos, entonces no se supone que se creen instancias, lo que podría convertirlo en una excepción aceptable.
Las convenciones de nombres son bestias divertidas. Lo más importante es la consistencia en un marco.
No hace falta decir que las convenciones OO pueden ayudar realmente a la legibilidad de la arquitectura. En este caso, la clase de conversión y sus métodos estáticos son los mejores intentos de reemplazo de las funciones globales que usan c # y se les da un nombre fluido para indicarlas como tales.
Convertir [parámetro] a Int32
Convertir [parámetro] a Single
Al nombrarlos como acciones, no como objetos, también comunicamos pureza funcional.
Esto se ve a menudo en el patrón de singleton también con la propiedad Instance
.
Mi opinión personal es que está bien que la clase Convert se llame después de la acción, porque es una clase estática y no se creará una instancia.
Simplemente suena mejor llamar
Convert.ToBoolean(var);
en lugar de
Converter.ConvertToBoolean(var);
No hay nada orientado a objetos sobre la clase Convert , porque la orientación a objetos se trata de datos con comportamiento , y la clase Convert no contiene datos ni estado.
Es básicamente una consideración práctica.
En Eiffel, por ejemplo, los métodos de conversión se habrían definido en una clase base, y todas las clases que necesiten usar los métodos de conversión se habrían derivado de esa clase base. Sin embargo, Eiffel tiene herencia múltiple, por lo que tiene sentido para Eiffel, pero no para un lenguaje como C # donde no tiene herencia múltiple.
Tu pensamiento es correcto. Convert
es una clase de utilidad estática, con un propósito: convertir entre diferentes tipos.
Solo tiene métodos (verbos), que son todos conversiones; por lo tanto, para facilitar la lectura, es mejor dar el nombre del verbo común a la clase en sí, que repetirlo en todos los métodos:
int i = Convert.ToInt32(value);
float f = Convet.ToSingle(value);
Son mucho más fluidos y legibles que:
int i = Conversions.ConvertToInt32(value);
float f = Conversions.ConvertToSingle(value);