Що потрібно пам’ятати про код GUI, це те, що він керується подіями, а керований подіями код завжди матиме вигляд маси випадково організованих обробників подій. Там, де це стає справді безладним, коли ти намагаєшся внести в клас код, що не керує подіями. Звичайно, він виглядає як підтримка обробників подій, і ви можете зберігати обробників подій красивими і маленькими, але весь цей додатковий код підтримки, що плаває навколо, робить ваш джерело GUI здається роздутим і безладним.
Отже, що ви можете зробити з цього приводу, і як зробити речі простішими для рефактора? Ну, я б спершу змінив своє визначення рефакторингу від чогось, що я роблю при нагоді, на те, що я роблю постійно, коли кодую. Чому? Тому що ви хочете, щоб рефакторинг дозволив вам легше змінювати код, а не навпаки. Я не просто прошу змінити семантику тут, але прошу вас зробити трохи розумової гігієніки, щоб побачити ваш код по-різному.
Три методи рефакторингу, які, як я вважаю, використовую найчастіше - це перейменування , метод вилучення та клас вилучення . Якби я ніколи не дізнався жодного іншого рефакторингу, ці троє все-таки дозволять мені зберегти свій код чистим та добре структурованим, і зі змісту вашого запитання мені здається, що ви, ймовірно, опинитесь у тих самих трьох рефакторингах майже постійно в щоб ваш код GUI був тонким і чистим.
Ви можете мати найкраще можливе розділення логіки GUI та Business у світі, і все-таки код GUI може виглядати так, що в середині нього був підірваний мін коду. Моя порада полягає в тому, щоб мати додатковий клас або два, щоб допомогти вам правильно керувати графічним інтерфейсом, і це не обов'язково, щоб бути класами View, якщо ви застосовуєте шаблон MVC - хоча часто ви знайдете посередницькі класи настільки схожі на ваш погляд, що ви часто будете відчувати бажання об'єднати їх для зручності. Я вважаю, що додавати додатковий шар, специфічний для графічного інтерфейсу для управління всією візуальною логікою, не дуже шкодить, однак, ймовірно, ви хочете зважити переваги та витрати на це.
Тому моя порада:
- Не робіть нічого безпосередньо за вашим графічним інтерфейсом, окрім як викликати та визначати, як графічний інтерфейс підключиться до перегляду (або посередницького шару).
- Не намагайтеся підключити кожну річ, пов’язану з переглядом, в один клас - або навіть один клас у вікні графічного інтерфейсу, - якщо для вас це не має сенсу. Ваша альтернатива полягає в створенні безлічі маленьких і простих в управлінні класами для управління вашою логікою графічного інтерфейсу.
- Коли ваші методи починають виглядати трохи більше, ніж на 4-5 рядків коду, вивчіть, чи це необхідно, і чи можливо витягнути метод або два, щоб ви могли зберегти ваші методи, навіть якщо це означає клас за допомогою багатьох інших методів.
- Якщо ваші заняття починають виглядати справді великими, почніть з видалення ВСІХ дублюваних функціональних можливостей, а потім подивіться, чи можете ви логічно згрупувати свої методи так, щоб ви могли витягти ще один клас або два.
- Подумайте про рефакторинг щоразу, коли ви пишете рядок коду. Якщо ви отримаєте рядок коду для роботи, подивіться, чи зможете ви переробити його, щоб уникнути дублювання функціональності або зробити його трохи меншим, не змінюючи поведінку.
- Прийміть неминуче, що ви завжди будете відчувати, що та чи інша частина у вашій системі почне відчувати себе трохи роздутою, особливо якщо ви нехтуєте рефакторингом під час руху. Навіть маючи кодову базу коду, ви все ще можете відчувати себе так, ніби є більше, що ви можете зробити. Це реальність написання програмного забезпечення, що ви завжди відчуєте, що щось більше можна було зробити "краще", тому вам потрібно досягти балансу між професійною роботою та золотою обробкою.
- Прийміть, що чим чистіше ви намагаєтеся зберегти свій код, тим менше видається ваш код.