Vì vậy, có lẽ giống như nhiều người, tôi thường thấy đau đầu với các vấn đề thiết kế, ví dụ, có một số mẫu / phương pháp thiết kế có vẻ phù hợp với vấn đề và có lợi ích mong muốn. Rất thường có một số cảnh báo gây khó khăn cho việc thực hiện mô hình / cách tiếp cận mà không có một số loại công việc xung quanh mà sau đó phủ nhận lợi ích của mô hình / cách tiếp cận. Tôi có thể rất dễ dàng kết thúc việc lặp đi lặp lại qua nhiều kiểu / cách tiếp cận vì có thể dự đoán rằng hầu hết tất cả chúng đều có một số cảnh báo rất quan trọng trong các tình huống trong thế giới thực, trong đó đơn giản là không phải là một giải pháp dễ dàng.
Thí dụ:
Tôi sẽ đưa cho bạn một ví dụ giả thuyết dựa trên một ví dụ thực tế mà tôi gặp gần đây. Giả sử tôi muốn sử dụng thành phần trên kế thừa vì hệ thống phân cấp thừa kế đã cản trở khả năng mở rộng của mã trong quá khứ. Tôi có thể cấu trúc lại mã nhưng sau đó thấy rằng có một số bối cảnh trong đó siêu lớp / lớp cơ bản chỉ cần gọi chức năng trên lớp con, mặc dù đã cố gắng tránh nó.
Cách tiếp cận tốt nhất tiếp theo dường như là triển khai một mẫu nửa đại biểu / quan sát viên và một nửa mẫu bố cục để siêu lớp có thể ủy thác hành vi hoặc để lớp con có thể quan sát các sự kiện của siêu lớp. Sau đó, lớp ít có khả năng mở rộng và duy trì được vì không rõ nó nên được mở rộng như thế nào, cũng rất khó để mở rộng người nghe / đại biểu hiện có. Ngoài ra thông tin không được ẩn tốt vì người ta bắt đầu cần biết cách triển khai để xem cách mở rộng siêu lớp (trừ khi bạn sử dụng các bình luận rất rộng rãi).
Vì vậy, sau này tôi có thể chọn chỉ đơn giản là sử dụng các nhà quan sát hoặc đại biểu hoàn toàn để thoát khỏi những nhược điểm đi kèm với việc trộn lẫn các phương pháp tiếp cận nặng nề. Tuy nhiên điều này đi kèm với các vấn đề riêng của nó. Ví dụ, tôi có thể thấy rằng cuối cùng tôi cần người quan sát hoặc đại biểu cho một số lượng hành vi ngày càng tăng cho đến khi tôi cuối cùng cần người quan sát / đại biểu cho thực tế mọi hành vi. Một lựa chọn có thể là chỉ có một người nghe / đại biểu lớn cho tất cả các hành vi nhưng sau đó lớp thực hiện kết thúc với rất nhiều phương thức trống, v.v.
Sau đó, tôi có thể thử một cách tiếp cận khác nhưng cũng có nhiều vấn đề với điều đó. Sau đó, tiếp theo, và sau đó vv
Quá trình lặp này trở nên rất khó khăn khi mỗi cách tiếp cận dường như có nhiều vấn đề như bất kỳ phương pháp nào khác và dẫn đến một loại tê liệt quyết định thiết kế . Cũng khó chấp nhận rằng mã sẽ có vấn đề như nhau bất kể sử dụng mẫu hoặc phương pháp thiết kế nào. Nếu tôi kết thúc trong tình huống này có nghĩa là vấn đề cần phải được xem xét lại? Những người khác làm gì khi gặp phải tình huống này?
Chỉnh sửa: Dường như có một số giải thích cho câu hỏi mà tôi muốn làm rõ:
- Tôi đã loại bỏ hoàn toàn OOP khỏi câu hỏi vì hóa ra nó không thực sự cụ thể đối với OOP, cộng với việc quá dễ hiểu sai một số ý kiến tôi đưa ra khi chuyển về OOP.
- Một số người đã tuyên bố tôi nên thực hiện một cách tiếp cận lặp lại và thử các mẫu khác nhau, hoặc tôi nên loại bỏ một mẫu khi nó ngừng hoạt động. Đây là quá trình tôi dự định đề cập đến ở nơi đầu tiên. Tôi nghĩ rằng điều này rõ ràng từ ví dụ nhưng tôi có thể đã làm cho nó rõ ràng hơn, vì vậy tôi đã chỉnh sửa câu hỏi để làm như vậy.