Tôi đang làm việc trên một dự án xử lý các yêu cầu và có hai thành phần cho yêu cầu: lệnh và các tham số. Trình xử lý cho mỗi lệnh rất đơn giản (<10 dòng, thường <5). Có ít nhất 20 lệnh và có khả năng sẽ có hơn 50 lệnh.
Tôi đã đưa ra một vài giải pháp:
- một chuyển đổi lớn / if-other trên các lệnh
- bản đồ các lệnh đến chức năng
- ánh xạ các lệnh đến các lớp / singletons tĩnh
Mỗi lệnh thực hiện một kiểm tra lỗi nhỏ và bit duy nhất có thể được trừu tượng hóa là kiểm tra số lượng tham số, được xác định cho mỗi lệnh.
Điều gì sẽ là giải pháp tốt nhất cho vấn đề này, và tại sao? Tôi cũng mở cho bất kỳ mẫu thiết kế nào tôi có thể đã bỏ lỡ.
Tôi đã đưa ra danh sách pro / con sau đây cho mỗi:
công tắc điện
- ưu
- giữ tất cả các lệnh trong một chức năng; vì chúng đơn giản, điều này làm cho nó trở thành một bảng tra cứu trực quan
- không cần làm lộn xộn nguồn với hàng tấn các hàm / lớp nhỏ sẽ chỉ được sử dụng ở một nơi
- khuyết điểm
- rất dài
- khó thêm lệnh theo lập trình (cần xâu chuỗi bằng trường hợp mặc định)
lệnh ánh xạ -> chức năng
- ưu
- khối nhỏ, kích thước cắn
- có thể thêm / xóa các lệnh theo chương trình
- khuyết điểm
- nếu được thực hiện trong dòng, tương tự trực quan như chuyển đổi
- nếu không được thực hiện nội tuyến, rất nhiều chức năng chỉ được sử dụng ở một nơi
lệnh ánh xạ -> lớp tĩnh / singleton
- ưu
- có thể sử dụng đa hình để xử lý kiểm tra lỗi đơn giản (chỉ như 3 dòng, nhưng vẫn)
- lợi ích tương tự với bản đồ -> giải pháp chức năng
- khuyết điểm
- rất nhiều lớp rất nhỏ sẽ làm lộn xộn dự án
- thực hiện không phải tất cả ở cùng một nơi, vì vậy không dễ để quét các triển khai
Ghi chú thêm:
Tôi đang viết bài này bằng Go, nhưng tôi không nghĩ giải pháp đó là ngôn ngữ cụ thể. Tôi đang tìm kiếm một giải pháp tổng quát hơn bởi vì tôi có thể cần phải làm một cái gì đó rất giống với các ngôn ngữ khác.
Một lệnh là một chuỗi, nhưng tôi có thể dễ dàng ánh xạ nó thành một số nếu thuận tiện. Chữ ký hàm là một cái gì đó như:
Reply Command(List<String> params)
Go có các chức năng cấp cao nhất và các nền tảng khác mà tôi đang xem xét cũng có các chức năng cấp cao nhất, do đó có sự khác biệt giữa các tùy chọn thứ hai và thứ ba.