Câu hỏi này là kịp thời cho tôi - tôi đã viết gần như chính xác mã như vậy ngày hôm qua. Chỉ cần thay thế "Động vật" bằng bất cứ điều gì có liên quan trong dự án của tôi, mặc dù tôi sẽ gắn bó với "Động vật" để thảo luận ở đây. Thay vì một câu lệnh 'chuyển đổi', tôi đã có một loạt các câu lệnh 'nếu' phức tạp hơn, liên quan đến nhiều hơn là chỉ so sánh một biến với các giá trị cố định nhất định. Nhưng đó là một chi tiết. Một phương pháp nhà máy tĩnh có vẻ như là một cách gọn gàng để thiết kế mọi thứ, vì thiết kế đã xuất hiện từ việc tái cấu trúc các mớ hỗn độn mã nhanh và bẩn trước đó.
Tôi đã từ chối thiết kế này với lý do lớp cơ sở có kiến thức về lớp dẫn xuất. Nếu các lớp LandAnimal và SeaAnimal nhỏ, gọn gàng và dễ dàng, chúng có thể nằm trong cùng một tệp nguồn. Nhưng tôi có các phương thức lộn xộn lớn để đọc các tệp văn bản không tuân theo bất kỳ tiêu chuẩn được xác định chính thức nào - tôi muốn lớp LandAnimal của mình trong tệp nguồn riêng của nó.
Điều đó dẫn đến sự phụ thuộc tệp vòng tròn - LandAnimal có nguồn gốc từ Động vật, nhưng Động vật cần phải biết rằng LandAnimal, SeaAnimal và mười lăm lớp khác tồn tại. Tôi đã rút phương thức xuất xưởng ra, đưa nó vào tệp riêng của mình (trong ứng dụng chính của tôi chứ không phải thư viện Động vật của tôi) Có một phương pháp tĩnh nhà máy có vẻ dễ thương và thông minh, nhưng tôi nhận ra rằng nó không thực sự giải quyết bất kỳ vấn đề thiết kế nào.
Tôi không biết làm thế nào điều này liên quan đến C # thành ngữ, vì tôi chuyển đổi ngôn ngữ rất nhiều, tôi thường bỏ qua các thành ngữ và quy ước đặc biệt với các ngôn ngữ và ngăn xếp bên ngoài công việc thông thường của tôi. Nếu bất cứ điều gì C # của tôi có thể trông "pythonic" nếu điều đó có ý nghĩa. Tôi nhắm đến sự rõ ràng chung.
Ngoài ra, tôi không biết liệu có lợi thế gì khi sử dụng phương thức tĩnh nhà máy trong trường hợp các lớp nhỏ, đơn giản không có khả năng được mở rộng trong công việc trong tương lai - trong một số trường hợp có tất cả trong một tệp nguồn.