Tôi có một enum của TriggerType, nơi trigger khác nhau có thể được thêm vàoLàm thế nào để tránh báo cáo chuyển đổi hợp cụ thể trong Java
public enum TriggerType {
meta,data,list,toggle
}
Những loại kích hoạt được sử dụng bên trong bộ xử lý khác nhau (ví dụ như Component, Dashboard vv) để xác định kích hoạt được kích hoạt bên trong xử lý thông qua một switch hợp cụ thể, đối với đoạn mã ví dụ Mã của ComponentHandler sử dụng kích hoạt thông qua công tắc hợp cụ thể được đưa ra dưới đây
@Override
public TriggerResultInterface executeTriggerJob(TriggerEventHelper triggerEventHelper) throws TriggerHandlerException {
switch (triggerEventHelper.getTriggerName()) {
case meta:
return getMetaComponentConfig(triggerEventHelper);
case data:
return getComponentData(triggerEventHelper);
default:
LOGGER.debug(INVALID_TRIGGER_NAME_CONFIGURED);
throw new TriggerHandlerException(INVALID_TRIGGER_NAME_CONFIGURED);
}
}
Imagine Nếu tôi muốn thêm một trigger mới, tôi phải cập nhật các enum lớp học không thể tránh khỏi, đồng thời tôi có để cập nhật từng lớp xử lý của tôi mà Trigger cần được sử dụng, Đây có phải là cách thiết kế có mã hóa hay không hoặc có giải pháp nào khác tốt hơn để tăng cường mã này và tuân theo nguyên tắc RẮN cùng với thiết kế tốt hơn không.
Tôi muốn nhấn mạnh rằng câu hỏi này không trùng lặp với this. Chỉ có một hành vi cần thiết trong tình huống đó cho mỗi loại (ví dụ: convertToMp3). Nhưng câu hỏi của tôi là loại enum của tôi (Trigger Type) phụ thuộc vào Handler mà nó có thể được sử dụng, vì vậy mỗi hành vi của Trigger Type enum hoặc việc thực hiện sẽ phụ thuộc vào yêu cầu của trình xử lý đang được sử dụng.
Mẫu lệnh có thể phù hợp với trường hợp sử dụng của bạn, nhưng như tôi đã thấy nó được triển khai, vẫn còn một câu lệnh 'switch' để tìm ra lệnh cần gọi. –
Đặt (các) phương thức trong Enum, với ghi đè cho mỗi giá trị. Tôi thấy trong thực tế có giá trị giới hạn khi thực hiện điều này, vì bạn phải cung cấp nhiều loại ngữ cảnh bên ngoài cho mỗi phương pháp phá hủy khả năng của Enum để đứng một mình, nhưng nếu bạn có thể hạn chế thiệt hại đó thì đó có thể là một kỹ thuật hữu ích. – EJP
[Câu trả lời tôi đã viết] (http://stackoverflow.com/a/39045135/2398375) cho bạn về các trình xử lý ngữ cảnh trước đó ngày hôm nay, đó là cách bạn muốn làm điều đó –