Điều cần nhớ về mã GUI là nó được điều khiển theo sự kiện và mã hướng sự kiện luôn có sự xuất hiện của một khối các trình xử lý sự kiện được tổ chức ngẫu nhiên. Nơi nó trở nên thực sự lộn xộn là khi bạn cố gắng đưa mã không theo sự kiện vào lớp. Chắc chắn, nó có vẻ ngoài cung cấp hỗ trợ cho các trình xử lý sự kiện và bạn có thể giữ cho các trình xử lý sự kiện của bạn đẹp và nhỏ, nhưng tất cả các mã hỗ trợ bổ sung đó trôi nổi làm cho nguồn GUI của bạn có vẻ cồng kềnh và lộn xộn.
Vì vậy, những gì bạn có thể làm về điều này, và làm thế nào bạn có thể làm cho mọi thứ dễ dàng hơn để tái cấu trúc? Chà, trước tiên tôi sẽ thay đổi định nghĩa tái cấu trúc của mình từ việc tôi làm trong dịp này sang việc tôi làm liên tục khi tôi viết mã. Tại sao? Bởi vì bạn muốn tái cấu trúc để cho phép bạn dễ dàng sửa đổi mã của mình hơn và không phải là cách khác. Tôi không chỉ đơn giản là yêu cầu bạn thay đổi ngữ nghĩa ở đây, mà thay vào đó, yêu cầu bạn thực hiện một chút trị liệu tinh thần để thấy mã của bạn khác đi.
Ba kỹ thuật tái cấu trúc mà tôi thấy tôi sử dụng phổ biến nhất là Đổi tên , Phương thức trích xuất và Lớp trích xuất . Nếu tôi chưa bao giờ học một phép tái cấu trúc nào khác, ba thứ đó vẫn cho phép tôi giữ mã của mình sạch sẽ và có cấu trúc tốt, và từ nội dung câu hỏi của bạn, có vẻ như bạn có thể sẽ thấy mình sử dụng ba phép tái cấu trúc gần như liên tục trong để giữ cho mã GUI của bạn mỏng và sạch sẽ.
Bạn có thể có sự phân tách tốt nhất về GUI và logic nghiệp vụ trên thế giới và mã GUI có thể trông giống như một mã của tôi đã được kích nổ ở giữa nó. Lời khuyên của tôi là không nên có thêm một hoặc hai lớp để giúp bạn quản lý GUI đúng cách và điều này không nhất thiết phải là các lớp View của bạn nếu bạn đang áp dụng mẫu MVC - mặc dù bạn thường xuyên tìm thấy các lớp trung gian rất giống với quan điểm của bạn đến nỗi bạn sẽ thường cảm thấy muốn hợp nhất chúng để thuận tiện. Tôi cho rằng điều này là thực sự không hại khi thêm một lớp dành riêng cho GUI để quản lý tất cả logic hình ảnh, tuy nhiên bạn có thể muốn cân nhắc lợi ích và chi phí khi làm như vậy.
Lời khuyên của tôi do đó là:
- Không làm gì trực tiếp đằng sau GUI của bạn ngoại trừ việc gọi và xác định cách GUI sẽ nối vào View (hoặc một lớp trung gian).
- Đừng cố bấm còi mọi thứ liên quan đến một lớp - hoặc thậm chí một lớp duy nhất trên mỗi cửa sổ GUI - trừ khi bạn làm như vậy có ý nghĩa. Thay thế của bạn là tạo ra nhiều lớp nhỏ và dễ quản lý để quản lý logic GUI của bạn.
- Khi các phương thức của bạn bắt đầu trông lớn hơn một chút so với 4-5 dòng mã, hãy kiểm tra xem điều này có cần thiết không và liệu có thể trích xuất một hoặc hai phương thức để bạn có thể giữ phương thức của mình không, ngay cả khi điều này có nghĩa là một lớp với nhiều phương pháp hơn.
- Nếu các lớp của bạn bắt đầu trông thực sự lớn, hãy bắt đầu bằng cách loại bỏ TẤT CẢ các chức năng trùng lặp, sau đó xem liệu bạn có thể nhóm hợp lý các phương thức của mình để bạn có thể trích xuất một hoặc hai lớp khác không.
- Hãy suy nghĩ về tái cấu trúc mỗi khi bạn viết một dòng mã. Nếu bạn nhận được một dòng mã để làm việc, hãy xem liệu bạn có thể cấu trúc lại nó để tránh trùng lặp chức năng hay để làm cho nó gọn hơn một chút mà không thay đổi hành vi.
- Chấp nhận điều không thể tránh khỏi, rằng bạn sẽ luôn cảm thấy rằng phần này hay phần khác trong hệ thống của bạn sẽ bắt đầu cảm thấy hơi khó chịu, đặc biệt nếu bạn bỏ bê việc tái cấu trúc khi bạn đi. Ngay cả với một cơ sở mã được bao bọc kỹ lưỡng, bạn vẫn có thể cảm thấy như có nhiều việc bạn có thể làm. Đây là thực tế của việc viết phần mềm, rằng bạn sẽ thấy mình luôn cảm thấy rằng một cái gì đó có thể đã được thực hiện "tốt hơn", vì vậy bạn cần phải cân bằng giữa làm một công việc chuyên nghiệp và mạ vàng.
- Chấp nhận rằng bạn càng cố gắng giữ mã của bạn, mã của bạn sẽ càng ít bị phồng lên.