Gần đây tôi đã xem xét một vài lớp tĩnh "túi tiện ích" kiểu Helper nổi xung quanh một số cơ sở mã C # lớn mà tôi làm việc cùng, mọi thứ về cơ bản giống như đoạn trích rất cô đọng sau đây:
// Helpers.cs
public static class Helpers
{
public static void DoSomething() {}
public static void DoSomethingElse() {}
}
Các phương pháp cụ thể tôi đã xem xét là
- hầu như không liên quan đến nhau,
- không có trạng thái rõ ràng vẫn tồn tại trên các yêu cầu,
- nhỏ, và
- mỗi loại được tiêu thụ bởi một loạt các loại không liên quan.
Chỉnh sửa: Trên đây không có ý định là một danh sách các vấn đề bị cáo buộc. Đây là danh sách các đặc điểm chung của các phương pháp cụ thể mà tôi đang xem xét. Đó là bối cảnh để giúp câu trả lời cung cấp các giải pháp phù hợp hơn.
Chỉ với câu hỏi này, tôi sẽ gọi loại phương pháp này là GLUM (phương pháp tiện ích nhẹ nói chung). Ý nghĩa tiêu cực của "glum" là một phần dự định. Tôi xin lỗi nếu điều này đi qua như một sự chơi chữ ngu ngốc.
Ngay cả việc bỏ qua sự hoài nghi mặc định của riêng tôi về GLUM, tôi không thích những điều sau đây về điều này:
- Một lớp tĩnh đang được sử dụng chỉ như một không gian tên.
- Định danh lớp tĩnh về cơ bản là vô nghĩa.
- Khi một GLUM mới được thêm vào, (a) lớp "túi" này sẽ bị chạm mà không có lý do chính đáng hoặc (b) một lớp "túi" mới được tạo ra (mà bản thân nó thường không phải là vấn đề; các lớp tĩnh thường chỉ lặp lại vấn đề không liên quan, nhưng với ít phương thức hơn).
- Meta đặt tên là inescapably khủng khiếp, phi tiêu chuẩn, và thường trong nội bộ mâu thuẫn, cho dù đó là
Helpers
,Utilities
hoặc bất cứ điều gì.
Một mô hình hợp lý và đơn giản để tái cấu trúc điều này là gì, tốt nhất là giải quyết các mối quan tâm trên, và tốt nhất là với một cú chạm càng nhẹ càng tốt?
Tôi có lẽ nên nhấn mạnh: Tất cả các phương pháp tôi đang xử lý đều không liên quan đến nhau. Dường như không có một cách hợp lý nào để chia chúng thành các túi phương thức lớp tĩnh hơn nhưng vẫn có nhiều thành viên.