Pros y contras de las clases de "fregadero de cocina" en C#

¿Hay penalizaciones de rendimiento tangibles por tener una gran cantidad de variables, propiedades o métodos en una sola clase de C#?

Tengo varias clases (un tablero de ajedrez, un generador de movimientos y un analizador PGN) que suman alrededor de 1,200 líneas de código. Tanto el generador de movimientos como el analizador están muy estrechamente acoplados a la clase del tablero, y existe una fuerte tentación de simplemente combinar las tres clases en una sola clase grande de "fregadero de cocina".

Entiendo y aplaudo el concepto de mantener cada clase enfocada en una sola tarea y encapsular limpiamente su diseño interno, pero dado que usar .NET es un requisito no negociable, también estoy dispuesto a sacrificar la "pureza del diseño" a cambio del rendimiento.

Además de los problemas obvios de legibilidad/mantenibilidad, ¿cuáles son las desventajas de tener una cantidad menor de clases complejas grandes, en lugar de una cantidad mayor de clases simples más pequeñas?

¡Salud! Programador humilde ,,, ^ .. ^ ,,,

preguntado el 22 de mayo de 12 a las 20:05

¿La mantenibilidad y la legibilidad no son suficientes? Como siempre, escribe el código más claro que puedas para empezar, refactorízalo para que sea aún más limpio. luego preocuparse por el rendimiento, después de haberlo medido y determinado si es lo suficientemente bueno o no. -

¿Por qué el uso de .NET te hace pensar que debes sacrificar un buen diseño? -

Realmente no tiene relevancia para C #, per se, las mismas respuestas serían ciertas en la mayoría de los lenguajes de programación OO. Si sus tres clases están demasiado fuertemente acopladas, tal vez en lugar de tratar de combinarlas, un mejor enfoque sería encontrar formas de desacoplarlas. -

"... dado que el uso de .NET es un requisito no negociable, también estoy dispuesto a sacrificar la "pureza del diseño" a cambio del rendimiento". Parece suponer que .NET traerá un mal rendimiento que, posiblemente, sea falso. Sería mejor que comprendiera y adoptara las capacidades de una plataforma y la usara bien. -

1 Respuestas

¿Hay penalizaciones de rendimiento tangibles por tener una gran cantidad de variables, propiedades o métodos en una sola clase de C#?

Tener más variables hace que las instancias tengan un mayor uso de memoria y tiempos de construcción potencialmente más largos; esto puede tener una penalización si las variables no son necesariamente necesarias en todas las circunstancias.

Dicho esto, las principales desventajas son más en términos de confiabilidad, mantenibilidad y capacidad de prueba.

Entiendo y aplaudo el concepto de mantener cada clase enfocada en una sola tarea y encapsular limpiamente su diseño interno, pero dado que usar .NET es un requisito no negociable, también estoy dispuesto a sacrificar la "pureza del diseño" a cambio del rendimiento.

.NET no tiene nada que ver con hacer un código horrible: puede tener un buen diseño y .NET en el mismo proyecto y, de hecho, esto es bastante simple de lograr.

Tengo varias clases (un tablero de ajedrez, un generador de movimientos y un analizador PGN) que suman alrededor de 1,200 líneas de código. Tanto el generador de movimientos como el analizador están muy estrechamente acoplados a la clase del tablero, y existe una fuerte tentación de simplemente combinar las tres clases en una sola clase grande de "fregadero de cocina".

Consideraría tratar de encontrar la motivación para refactorizar esto y desacoplarlo en clases más pequeñas. Es probable que esto ayude en todos los sentidos, incluido el rendimiento (si lo considera necesario), ya que normalmente es más sencillo solucionar un problema de rendimiento en un diseño limpio y bien pensado que encontrar o solucionar un problema de rendimiento de forma estricta. acoplado, gran base de código. Las clases más pequeñas son más fáciles de perfilar y medir, lo que a su vez permite que los problemas reales de rendimiento (si los hay) se descubran y corrijan de manera mucho más simple que cuando se trabaja con un gran desorden de código.

contestado el 22 de mayo de 12 a las 20:05

"buen diseño... bastante simple de lograr" Bueno, "simple" podría ser una opción para muchas personas, pero sin duda es posible. Sin embargo, diría que la mayoría de la gente necesita trabajar un poco en ello. - Servir

@Servy True, pero .NET no lo hace más difícil, diría que es más simple en .NET que en muchos otros marcos, ya que muchas de las clases básicas y de herramientas necesarias ya existen para usted. - Reed Copsey

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.