Lo que hay que recordar acerca del código GUI es que es impulsado por eventos, y el código impulsado por eventos siempre tendrá la apariencia de una masa de manejadores de eventos organizados al azar. Donde realmente se ensucia es cuando intentas meter en la clase código no impulsado por eventos. Claro, tiene la apariencia de proporcionar soporte para los manejadores de eventos y puedes mantener tus manejadores de eventos agradables y pequeños, pero todo ese código de soporte adicional que flota alrededor hace que tu fuente de GUI parezca inflada y sucia.
Entonces, ¿qué puedes hacer al respecto y cómo puedes hacer las cosas más fáciles de refactorizar? Bueno, primero cambiaría mi definición de refactorización de algo que hago en ocasiones a algo que hago continuamente mientras código. ¿Por qué? Porque desea que la refactorización le permita modificar su código más fácilmente, y no al revés. No te estoy pidiendo simplemente que cambies la semántica aquí, sino que te pido que hagas un poco de calistenia mental para ver tu código de manera diferente.
Las tres técnicas de refactorización que utilizo con mayor frecuencia son Cambiar nombre , Método de extracción y Clase de extracción . Si nunca aprendiera una sola otra refactorización, esos 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á usando 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 la GUI puede parecer que un código mío ha sido detonado en medio de él. Mi consejo es que no está de más tener una clase extra o dos para ayudarlo a administrar su GUI correctamente, y esto no necesariamente tiene que ser su clase de Ver si está aplicando el patrón MVC - aunque con frecuencia encontrará que las clases intermedias son tan similares a su opinión que a menudo sentirá la necesidad de combinarlas por conveniencia. Mi opinión sobre esto es que realmente no está mal 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.
Por lo tanto, mi consejo es:
- No haga nada directamente detrás de su GUI, excepto para invocar y definir cómo se conectará la GUI en la Vista (o una capa intermedia).
- No intente calmar 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 haga. Su alternativa es crear muchas clases pequeñas y fáciles de administrar para administrar su lógica GUI.
- Cuando sus métodos comienzan a parecer un poco más grandes que un código de 4-5 líneas, examine si esto es necesario y si es posible extraer uno o dos métodos para que pueda mantener sus métodos magros, incluso si esto significa una clase con muchos más métodos.
- Si sus clases comienzan a parecer muy grandes, comience por eliminar TODA la funcionalidad duplicada y luego vea si puede agrupar sus métodos de manera lógica para poder extraer otra clase o dos.
- Piense en la refactorización cada vez que escriba una línea de código. Si obtiene una línea de código para trabajar, vea si puede refactorizarla para evitar la duplicación de la funcionalidad, o para hacerla un poco más sencilla 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, puedes sentir que hay más de lo que podrías hacer. Esta es la realidad de escribir software, ya que siempre tendrá la sensación de que algo más podría haberse hecho "mejor", por lo que debe encontrar un equilibrio entre hacer un trabajo profesional y chapado en oro.
- Acepte que cuanto más limpia intente y guarde su código, menor será su código.