의도가 추상화되어 있으므로 은 어떻게 구현 되었습니까? 또는 소스 코드가 어떻게 구성되었는지는 중요하지 않습니다. 기본적인 수준에서 당신이 가지고있는 것은 실패 설명 모음을 생성하는 체커 모음입니다.
들의 유사 코드는 기본적으로 다음과 같습니다
장소에서이 논리와
let reasons be a new, empty collection of failure reasons
let checkers be the list of relevant checkers
for each checker in checkers
if checker passes, continue
if checker fails, add explanation to reasons
if number of reasons is zero,
voucher is valid, success
if number of reasons > zero,
the voucher is invalid, format each element in reasons for display to the user
,이 코드의 일부가 아니라 그들이 얻을 수로, 체커가 어떻게 구성되어 있는지 중요하지 않습니다 목록. 당신은 수표가 많은 단일 방법을 사용할 수 있으며, 아마도 여러 가지 이유가있을 수 있습니다. 검사기 목록에 각각 하나의 인스턴스가있는 많은 클래스를 가질 수 있습니다. 결정적으로 실제 체커는이 논리에서 분리되며 언제든지 다른 체커를 사용할 수 있습니다 (비즈니스 규칙 변경 또는 다른 지역의 다른 규칙).
언어에 따라 최소한 체커에 사용 된 유형을 추상화해야합니다.
시작하기. 동일한 데이터베이스 쿼리를 발견하면 체커 컬렉션 실행을위한 캐시를 고려해야합니다.
소스 레벨에서 체커를 구성하는 방법은 중요하지 않습니다. 오직 추상화가 있습니다. 세부 사항은 일단 숨겨진 추상 수준을 제공하면 상당히 유연합니다.
장점 :
- (아마도 비즈니스 규칙에 따라 변경됩니다) 실제, 구체적인 검사에 대해 걱정하지 않는 검사를 수행하는 비트.
- checker는 다음과 같이 구성 할 수 있습니다. 하나의 소스 파일에 함께 정의되거나 다른 구성표에 따라 펼쳐집니다. 또한 테스트를 위해 단일 체커를 자유롭게 분리 할 수 있습니다.
- 컬렉션 및 예쁜 서식은 검사 유형이나 수에 관계없이 한 번만 구현하면됩니다.
단점 :
- 그것은 추상화를 설계하는 괜찮은 일을 할 선행 시간이 걸립니다. 이것은 아마도 나중에 지불 할 것입니다.
- 간접 참조의 계층은 이해하기 어렵게 만들고 실제 확인을 추적합니다. 유연성은 이해하기 쉽지 않습니다. 이러한 시나리오를 고려해야합니다. 제 생각에는 바우처 에 대한 규칙은으로 시간이 지남에 따라 변경 될 가능성이 있으며 여기 추상화는 이해하기 어렵지 않으므로 그만한 가치가 있다고 말하고 싶습니다.
예를 Java로 작성하는 데 시간을 할애했지만 실제로 많이 추가하지 않았습니다. 당신이 추상화의 관점에서 생각하고 시도한다면, 실제 메커니즘은 덜 중요합니다.