Lo que hay que recordar sobre el código GUI es que está controlado por eventos, y el código controlado por eventos siempre tendrá la apariencia de una masa de controladores de eventos organizados al azar. Donde se vuelve realmente desordenado es cuando tratas de calzar el código no controlado por eventos en la clase. Claro, tiene la apariencia de proporcionar soporte para los controladores de eventos y puede mantener sus controladores de eventos agradables y pequeños, pero todo ese código de soporte adicional flotando hace que su fuente de GUI parezca hinchada y desordenada.
Entonces, ¿qué puede hacer al respecto y cómo puede hacer que las cosas sean más fáciles de refactorizar? Bueno, primero cambiaría mi definición de refactorización de algo que hago ocasionalmente a algo que hago continuamente mientras codifico. ¿Por qué? Porque desea refactorizar para permitirle modificar más fácilmente su código, y no al revés. No solo le pido que cambie la semántica aquí, sino que le pido que haga un poco de calistenia mental para ver su código de manera diferente.
Las tres técnicas de refactorización que considero que uso más comúnmente son Cambiar nombre , Método de extracción y Clase de extracción . Si nunca aprendí una sola refactorización, esas tres aún me permitirían mantener mi código limpio y bien estructurado, y por el contenido de su pregunta, me parece que probablemente se encontrará utilizando las mismas tres refactorizaciones casi constantemente en Para mantener su código GUI delgado y limpio.
Puede tener la mejor separación posible de GUI y lógica de negocios en el mundo, y aún así el código de GUI puede parecer una mina de código que se ha detonado en el medio. Mi consejo es que no está de más tener una o dos clases adicionales para ayudarlo a administrar su GUI correctamente, y esto no necesariamente tiene que ser sus clases de Vista si está aplicando el patrón MVC, aunque con frecuencia encontrará las clases intermedias son tan similares a su punto de vista que a menudo sentirá la necesidad de fusionarlas por conveniencia. Mi opinión sobre esto es que realmente no está de más agregar una capa adicional específica de GUI para administrar toda la lógica visual, sin embargo, es probable que desee sopesar los beneficios y los costos de hacerlo.
Mi consejo por lo tanto es:
- No haga nada directamente detrás de su GUI excepto invocar y definir cómo la GUI se enganchará a la Vista (o una capa intermedia).
- No trates de calzar cada cosa relacionada con la vista en una sola clase, o incluso en una sola clase por ventana GUI, a menos que tenga sentido que lo hagas. Su alternativa es crear muchas clases pequeñas y fáciles de administrar para administrar su lógica GUI.
- Cuando sus métodos comiencen a verse un poco más grandes que 4-5 líneas de código, examine si esto es necesario y si es posible extraer uno o dos métodos para que pueda mantener sus métodos ajustados, incluso si esto significa una clase Con muchos más métodos.
- Si sus clases comienzan a verse realmente grandes, comience eliminando TODAS las funcionalidades duplicadas y luego vea si puede agrupar lógicamente sus métodos para poder extraer otra clase o dos.
- Piense en refactorizar cada vez que escriba una línea de código. Si consigue que funcione una línea de código, vea si puede refactorizarla para evitar la duplicación de funciones o para que sea un poco más ágil sin cambiar el comportamiento.
- Acepte lo inevitable, que siempre sentirá que una parte u otra en su sistema comenzará a sentirse un poco hinchada, especialmente si descuida la refactorización a medida que avanza. Incluso con una base de código bien factorizada, aún puede sentir que hay más que puede hacer. Esta es la realidad del software de escritura: siempre se sentirá que algo más se podría haber hecho "mejor", por lo que debe lograr un equilibrio entre hacer un trabajo profesional y el enchapado en oro.
- Acepte que cuanto más limpio intente mantener su código, menos hinchado parecerá su código.