Tôi đang nghe những ý kiến trái ngược nhau như:
- "Các lớp Trình quản lý chuyên dụng hầu như không bao giờ là công cụ kỹ thuật phù hợp"
- "Các lớp Trình quản lý chuyên dụng (hiện tại) là cách tốt nhất để tồn tại trong một dự án lớn với hàng ngàn tài nguyên"
Hãy lấy một lớp ResourceManager cổ điển có chức năng sau:
- Tải tài sản (kết cấu, âm thanh, mô hình 3D, v.v.)
- Đảm bảo tài sản chỉ được tải một lần bằng cách giữ bộ đệm
- Tham chiếu đếm tài sản để xác định xem chúng có thể được giải quyết hay không
- Ẩn nơi tài sản thực tế đến từ (ví dụ: có thể là một tệp cho mỗi tài sản hoặc tất cả tài sản trong một tệp gói hoặc tài sản thậm chí có thể được tải qua mạng)
- Có thể tải lại tài sản mà không cần khởi động lại chương trình, điều này cực kỳ hữu ích cho các nghệ sĩ làm việc trong trò chơi.
Chúng ta cũng hãy loại bỏ đối số "singletons là xấu" bằng cách giả vờ các đối tượng ResourceManager này không phải là singletons, và thay vào đó được truyền qua thông qua tiêm phụ thuộc .
Sau đó là đối số "sử dụng nhà máy" hoặc "gọi nó là nhà máy". Vấn đề của tôi với điều này là, vâng, nó là một nhà máy, nhưng nó cũng là một bộ đệm và bộ tải lại (vì không có từ nào tốt hơn). Gọi nó là một nhà máy không mô tả đúng, và nếu tôi biến nó thành một nhà máy phù hợp thì bộ nhớ đệm và tải lại được thực hiện ở đâu?
Tôi đồng ý rằng các lớp "Manager" thường là một triệu chứng của kiến trúc xấu, nhưng trong trường hợp cụ thể này, làm thế nào nó có thể được cấu trúc lại mà vẫn giữ được tất cả các chức năng ? Đây có phải là một tình huống trong đó một lớp "Manager" thực sự phù hợp?