Cuando deberíamos usar constructor sobre propiedades o viceversa al asignar valores.Constructor o propiedades: cuál es la mejor opción al asignar valores
Respuesta
Un constructor es un tipo de contrato muy conveniente y potente: una forma de exigir a los consumidores que proporcionen cierta información antes de que puedan usar su objeto. Entonces, para información que es necesaria para que la instancia funcione correctamente, use parámetros de constructor. Este es el concepto subyacente de la inyección de dependencia: cualquier cosa de la que dependa para hacer su trabajo debe ser inyectada (provista) antes de comenzar.
Las propiedades pueden representar un problema interesante. En general, la experiencia me ha enseñado que siempre que sea posible, las propiedades deben ser de solo lectura y los objetos generalmente deben ser tan externamente inmutables como sea posible. Agregar un establecedor público a una propiedad es un multiplicador de complejidad para su clase. Por supuesto, siempre hay tipos de objetos, las entidades son un buen ejemplo, donde los instaladores tienen sentido. Pero para la mayoría de los objetos, el patrón de "write-to vía constructor"/"read-from via properties" para state ha reducido enormemente la complejidad y los riesgos de errores en las aplicaciones de las que he sido responsable.
gracias por la ayuda – user498432
Utiliza un constructor cuando necesita valores iniciales de cuerdo arbitrarios, y propiedades cuando desea que los valores se puedan cambiar posteriormente.
Siempre prefiero propiedades, es así de bien – user498432
Si su objeto no necesita valores iniciales arbitrarios, es decir que tiene valores sanos dentro del propio método constructor, claro. –
Use constructor si los valores de los parámetros son realmente necesarios para que se construya su objeto (sin ellos, el objeto no puede comenzar a funcionar). Utilice las propiedades para los parámetros que tienen un valor predeterminado aceptable, por lo que está bien no asignarlas en absoluto. Puede proporcionar algunos constructores adicionales que asignarán algunas propiedades como una forma abreviada, cortesía para sus usuarios.
Hay algunos casos en los que las propiedades mutables pueden ser preferibles:
Por 'puros' Los objetos de datos mutables, donde el mero establecimiento de las propiedades pueden tener efectos secundarios. Por ejemplo, puede tener un objeto que represente alguna entidad en la base de datos, pero la modificación de sus propiedades no tendrá ningún efecto hasta que realice explícitamente una operación de confirmación. El objeto es un paquete para contener datos, pero nada directamente reacciona a los cambios en los datos.
Si tiene una gran cantidad de estado configurable que afectará a alguna operación y muchas de las propiedades configurables tienen valores predeterminados significativos. Si estas son propiedades de la clase que realiza la operación, es típico tener alguna noción de 'congelar' el estado para que las propiedades mutables emitan excepciones mientras la operación se está ejecutando.
Si está desarrollando una clase que será consumida por un diseñador visual u otro sistema que dependa de la Reflexión sobre las propiedades. Por ejemplo, el sistema de enlace de datos en WPF hace un uso extenso de las propiedades mutables como una forma de comunicar las interacciones de UI. Con un diseño adecuado para gestionar estas mutaciones, puede crear algunas interfaces muy potentes y receptivas.
- 1. ¿Cuál es la mejor opción?
- 2. ¿Cuál es la mejor estrategia para cargar propiedades?
- 3. LINQ to MySQL: ¿cuál es la mejor opción?
- 4. ¿Cuál es la mejor manera de comparar varias propiedades javabean?
- 5. ¿Cuál es la mejor opción para la pestaña del navegador: multihilo o proceso múltiple?
- 6. ¿Cuál es la forma preferida de construir objetos en C#? ¿Parámetros o propiedades del constructor?
- 7. xml, html o xhtml en <xsl:output>: ¿Cuál es la mejor opción?
- 8. Cuál es mejor: mysql_connect o mysql_pconnect
- 9. SML - variable sin asignar o constructor
- 10. ¿Cuál es la mejor opción para usar: localStorage(), window.localStorage() o document.localStorage()?
- 11. ¿Cuál es la mejor manera de inicializar un frijol?
- 12. ¿Cuál es mejor H2 o HSQLDB?
- 13. Cuál es mejor - Ext.get() o document.getElementById()
- 14. ¿Cuál es la mejor herramienta para organizar o alfabetizar automáticamente tus propiedades de CSS?
- 15. Necesito depurar PHP. ¿Cuál es mi mejor opción?
- 16. Esquema DTD o XML. ¿Cuál es mejor?
- 17. Apache2: mod_wsgi o mod_python, ¿cuál es mejor?
- 18. ¿Cuál es tu opción favorita de g ++?
- 19. ¿Cuál es la forma correcta de asignar memoria en el constructor de C++?
- 20. min o gzip, ¿cuál es mejor?
- 21. cuál es mejor ... GATE o RapidMiner
- 22. Propiedades de escritura, ¿cuál es el punto?
- 23. ¿Cuál es la mejor opción para la comunicación entre procesos de .NET?
- 24. PHP, ¿cuál es la mejor opción para eliminar una cadena conocida?
- 25. Cuál es el mejor módulo Drupal Survey
- 26. ¿Cuál es la mejor forma de pasar objetos al modelo de vista "navegado a" en MVVMCross?
- 27. ¿Cuál es la mejor práctica para enviar datos al cliente: POCO o DTO?
- 28. matriz de enteros o matriz de estructuras: ¿cuál es mejor?
- 29. ¿Cuál es la mejor manera de asignar los requisitos a las características en Redmine?
- 30. ¿Cuál es la sintaxis para asignar múltiples valores enum a una propiedad en F #?
http://stackoverflow.com/questions/863045/what-is-the-preferred-way-of-constructing-objects-in-c-constructor-parameters-o – jcolebrand
Supongo que se trata de echar * initial * values ... –
@drachenstern - gracias por el enlace – user498432