Báo cáo IMO switch
không phải là xấu, nhưng cần tránh nếu có thể. Một giải pháp là sử dụng Map
trong đó các phím là các lệnh và các giá trị Command
các đối tượng có phương thức execute()
. Hoặc List
nếu lệnh của bạn là số và không có khoảng trống.
Tuy nhiên, thông thường, bạn sẽ sử dụng các câu lệnh switch
khi triển khai các mẫu thiết kế; một ví dụ là sử dụng mẫu Chain of responsibility để xử lý các lệnh được cung cấp cho bất kỳ lệnh "id" hoặc "value" nào. (Mẫu Strategy cũng được đề cập đến.) Tuy nhiên, trong trường hợp của bạn, bạn cũng có thể xem xét mẫu Command.
Về cơ bản, trong OOP, bạn sẽ cố gắng sử dụng các giải pháp khác ngoài việc dựa vào các khối switch
, sử dụng mô hình lập trình theo thủ tục. Tuy nhiên, khi nào và làm thế nào để sử dụng hoặc là phần nào quyết định của bạn. Cá nhân tôi thường sử dụng switch
khối khi sử dụng mô hình Factory, vv
Một định nghĩa của tổ chức mã này là:
- một gói là một nhóm các lớp học với API coherant (ví dụ:
Collection
API trong nhiều khuôn khổ)
- một lớp là một tập hợp các chức năng mạch lạc (ví dụ:
Math
lớp ...
- phương thức là một chức năng; nó nên làm một điều và một điều duy nhất. (ví dụ: thêm một mục trong danh sách có thể yêu cầu phóng to danh sách đã nêu, trong trường hợp này, phương pháp
add
sẽ dựa vào các phương pháp khác để thực hiện điều đó và sẽ không thực hiện thao tác đó, vì đó không phải là hợp đồng.)
Do đó, nếu tuyên bố switch
của bạn thực hiện các loại hoạt động khác nhau, bạn đang "vi phạm" định nghĩa đó; trong khi sử dụng một mẫu thiết kế thì không phải vì mỗi hoạt động được định nghĩa trong lớp riêng của nó (nó là tập các chức năng riêng).
Nguồn
2010-12-11 14:08:12
Xem [Báo cáo chuyển đổi lớn: OOP xấu? ] (http://stackoverflow.com/questions/505454/large-switch-statements-bad-oop) –
Luôn tìm thấy điều này thú vị vì mã thay đổi rõ ràng là thêm một trường hợp khác trong câu lệnh switch nhưng thêm một lớp khác thì không. .. đôi khi người thuần túy OO có thể nhận được một chút "tôn giáo" ... –
'' Được coi là có hại "Được coi là có hại '. – delnan