¿Deben las clases, enumeraciones y otras entidades colocarse en archivos separados?

12

El jefe de equipo / arquitecto de mi compañía argumenta que un proyecto a gran escala es más fácil de entender si las "entidades conectadas por lógica" se colocan en un archivo .cs.

Yo cito:

  • "Toda la estructura de la lógica y la interfaz y la clase se puede ver en un solo lugar, este es un argumento que no se puede refutar. Para ver la misma cosa pero con un montón de archivos necesitas usar las herramientas, clase diagrama, R # para navegación, etc. "

  • "Siguiendo la pobre teoría, podría gritar que un ejército de archivos separados es genial, pero cuando se trata de hacer cambios en el código existente, especialmente si no fue un escritor de este código, es muy difícil entender muchos archivos dispersos". Por lo tanto, en los foros, puede escribir "un archivo de enumeración", pero en la práctica este enfoque nunca debe usarse "

  • "... En cuanto a la separación de la base de código entre desarrolladores, hoy en día no es un problema editar simultáneamente el mismo archivo. La fusión no es un problema".

Escuché y leí muchas veces que tenemos que crear un archivo .cs por enumeración, clase, etc., y esta es la mejor práctica.

Pero no puedo convencerlo. Él dice que no confía en ningún programador conocido como Jon Skeet. Por cierto, aquí está la opinión de Skeet sobre este tema: ¿Dónde está el mejor lugar para ubicar tipos de enumeración?

¿Qué piensas? ¿Hay un problema real? ¿O es cuestión de gustos y debe estar regulado por el estándar de codificación de la organización?

IngenieroSpock
fuente
No puedes ganarlos todos, incluso cuando juegas la Tarjeta Skeet.
JeffO
66
Para ser justos, el reclamo de Jon Skeet a la fama no es ser un excelente artesano del código, sino que está dispuesto a responder preguntas de C # de manera rápida y precisa (y literalmente escribió el libro). Y posiblemente nunca duerma, aunque esto es solo un rumor. Su opinión sobre esto por sí sola no debería ser suficiente, y su argumento allí no es fuerte. Eso no significa que esté equivocado en este caso, solo digo que su superior tiene derecho a decir "venga a mí con hechos y razones, no opiniones".
pdr
2
Voto por una clase por archivo, y cualquier enumeración o interfaz que solo sea relevante para esa clase debe estar dentro de la clase, no solo dentro del archivo. Por otro lado, debe seguir el estándar de codificación de la compañía, sin importar cuán irrazonable pueda ser, porque eso es parte de escribir un buen código para su trabajo .
Bobson
2
Podría señalar que StyleCop como un complemento de Visual Studio tiene advertencias si hay> 1 clase por archivo
Kevin

Respuestas:

20

Hay un par de fallas en el argumento de su jefe de equipo:

  1. Las clases y enumeraciones bien diseñadas están destinadas a ser utilizadas en cualquier parte de su proyecto, no solo donde pueden tener sentido lógicamente.

  2. Las clases y enumeraciones debidamente documentadas con comentarios XML son muy autodescriptivas, simplemente se ciernen sobre el elemento que hace referencia a él.

  3. Siempre puede obtener una definición de clase o enumeración haciendo clic con el botón derecho en la referencia y seleccionando "Ir a definición", por lo que realmente no debería importar dónde la coloque.

  4. Poner objetos juntos de manera "lógica" es arbitrario (es decir, tienes que pensar en lo que significa "lógico". Prefiero gastar esos ciclos de reloj haciendo la programación real).

Configurar cada definición de objeto en su propio archivo crea una expectativa uniforme y disciplinada de organización y estructura, y no plantea preguntas como "¿por qué está esto aquí?" Eso es algo muy bueno de tener.

Si dos o más objetos están relacionados lógicamente, simplemente colóquelos en su propia carpeta en el Explorador de proyectos.

Robert Harvey
fuente
55
En otra nota, las fusiones de código apestan. Claro, puedes hacerlo, pero ¿por qué, si no tienes que hacerlo?
Robert Harvey
4

Lo más probable es que el líder del equipo se cortara los dientes en una era anterior cuando hacer clic derecho y elegir "ir a definición" no era una opción. Sé que cuando estoy en modo de desarrollo de picos pesados, creceré archivos de clase bastante masivos hasta que deje que resharper lo arregle por mí.

En cualquier caso, si desea llevar al equipo a la tarea, pregúntele por qué estas clases y enumeraciones no son clases y enumeraciones secundarias; no hay razón para declararlas como entidades independientes si son entidades realmente dependientes. Esto podría ayudarlo a pensar un poco sobre la fatwa.

Wyatt Barnett
fuente