Một nhóm bạn và tôi đã làm việc trong một dự án trong thời gian vừa qua và chúng tôi muốn phát minh ra một cách OOP đẹp để thể hiện một kịch bản cụ thể cho sản phẩm của chúng tôi. Về cơ bản, chúng tôi đang làm việc trong một trò chơi địa ngục đạn kiểu Touhou và chúng tôi muốn tạo ra một hệ thống nơi chúng tôi có thể dễ dàng thể hiện bất kỳ hành vi có thể nào của viên đạn mà chúng tôi có thể mơ thấy.
Vì vậy, đó chính xác là những gì chúng tôi đã làm; chúng tôi đã tạo ra một kiến trúc thực sự tao nhã cho phép chúng tôi phân chia hành vi của viên đạn thành các thành phần khác nhau có thể được gắn vào các trường hợp viên đạn theo ý muốn, giống như hệ thống thành phần của Unity . Nó hoạt động độc đáo, nó dễ dàng mở rộng, nó linh hoạt và bao phủ tất cả các căn cứ của chúng tôi, nhưng có một vấn đề nhỏ.
Ứng dụng của chúng tôi cũng liên quan đến một lượng lớn thế hệ thủ tục, cụ thể là chúng tôi tạo ra các hành vi của viên đạn. Tại sao điều này là một vấn đề? Chà, giải pháp OOP của chúng tôi để thể hiện hành vi viên đạn, trong khi thanh lịch, hơi phức tạp khi làm việc mà không có con người. Con người đủ thông minh để nghĩ ra giải pháp cho các vấn đề vừa logic vừa thông minh. Các thuật toán tạo thủ tục chưa thực sự thông minh và chúng tôi đã gặp khó khăn khi triển khai AI sử dụng kiến trúc OOP của chúng tôi với tiềm năng tối đa của nó. Phải thừa nhận rằng, đó là một lỗ hổng của kiến trúc là nó không trực quan trong mọi tình huống.
Vì vậy, để khắc phục vấn đề này, về cơ bản, chúng tôi đã chuyển tất cả các hành vi được cung cấp bởi các thành phần khác nhau vào lớp đạn, để mọi thứ chúng ta có thể tưởng tượng được cung cấp trực tiếp trong mỗi trường hợp đạn thay vì trong các trường hợp thành phần liên quan khác. Điều này làm cho các thuật toán tạo thủ tục của chúng ta dễ làm việc hơn một chút, nhưng bây giờ lớp đạn của chúng ta là một đối tượng thần khổng lồ . Nó dễ dàng là lớp lớn nhất trong chương trình cho đến nay với mã nhiều hơn năm lần so với bất kỳ thứ gì khác. Đó là một chút đau để duy trì là tốt.
Có ổn không khi một trong các lớp của chúng tôi biến thành một đối tượng thần, chỉ để làm cho nó dễ dàng hơn để làm việc với một vấn đề khác? Nói chung, có ổn không khi mã có mùi trong mã của bạn nếu nó thừa nhận một giải pháp dễ dàng hơn cho một vấn đề khác?