요청을 처리하는 프로젝트를 진행 중이며 요청에는 명령과 매개 변수라는 두 가지 구성 요소가 있습니다. 각 명령의 처리기는 매우 간단합니다 (<10 줄, 종종 <5). 최소 20 개의 명령이 있으며 50 개가 넘는 명령이있을 수 있습니다.
나는 몇 가지 해결책을 생각해 냈습니다.
- 하나의 큰 스위치 / if-else 명령
- 명령을 함수에 매핑
- 정적 클래스 / 단일 명령에 대한 명령 맵
각 명령은 약간의 오류 검사를 수행하며 추상화 할 수있는 유일한 비트는 각 명령에 대해 정의 된 매개 변수 수를 확인하는 것입니다.
이 문제에 대한 최선의 해결책은 무엇이며 왜 그런가? 또한 내가 놓쳤을 수도있는 모든 디자인 패턴을 사용할 수 있습니다.
나는 각각에 대해 다음과 같은 프로 / 콘 목록을 생각해 냈습니다.
스위치
- 찬성
- 모든 명령을 하나의 기능으로 유지합니다. 단순하기 때문에 시각적 조회 테이블이됩니다.
- 한곳에서만 사용되는 수많은 작은 함수 / 클래스로 소스를 정리할 필요가 없습니다.
- 단점
- 매우 긴
- 프로그래밍 방식으로 명령을 추가하기 어려움 (기본 사례를 사용하여 연결해야 함)
지도 명령-> 기능
- 찬성
- 작고 한입 크기의 덩어리
- 프로그래밍 방식으로 명령을 추가 / 제거 할 수 있습니다
- 단점
- 인라인으로 수행되면 스위치와 시각적으로 동일
- 인라인으로 수행되지 않으면 많은 기능이 한 곳에서만 사용됩니다.
맵 명령-> 정적 클래스 / 단일
- 찬성
- 다형성을 사용하여 간단한 오류 검사를 처리 할 수 있습니다 (3 줄과 같지만 여전히)
- map-> 함수 솔루션과 유사한 이점
- 단점
- 아주 작은 수업이 많으면 프로젝트가 복잡해집니다
- 구현이 모두 같은 장소에있는 것은 아니므로 구현을 스캔하기가 쉽지 않습니다.
추가 메모 :
나는 이것을 Go로 작성하고 있지만 해결책이 언어마다 다르다고 생각하지 않습니다. 다른 언어에서 매우 비슷한 것을해야하기 때문에보다 일반적인 해결책을 찾고 있습니다.
명령은 문자열이지만 편리하다면 이것을 쉽게 숫자에 매핑 할 수 있습니다. 함수 서명은 다음과 같습니다.
Reply Command(List<String> params)
Go에는 최상위 기능이 있으며 다른 플랫폼에도 최상위 기능이 있으므로 두 번째 옵션과 세 번째 옵션의 차이점이 있습니다.