제목이 분명하지 않을 수도 있지만 더 좋은 것을 찾지 못했습니다. 여기에 문제가있다. 나는 QueryEngine가 쿼리해야 모든 페이지를 제공하는 범위 인터페이스를 가지고있다.쿼리 동작을 제외/적용하지 않도록 디자인하는 방법
interface Scope{
Set<Page> getPages();
}
interface QueryEngine{
void query(Scope scope){
queryIn(scope.getPages());
}
}
이 제공하는 것보다 다른 쿼리의 모든 페이지 을 말한다 범위의 또 다른 유형이있다. 이 동작을 모델링하려고했습니다.
는interface ExcludeScope extends Scope{
}
어떤 경우에는 내가 QueryEngine
interface QueryEngine{
void query(Scope scope){
if(scope instanceof ExcludeScope){
queryInPagesOtherThan(scope.getPages());
}else{
queryIn(scope.getPages());
}
}
}
아래처럼 뭔가를해야 아니면 내가 느끼는 부울
interface Scope{
Set<Page> getPages();
boolean shouldExclude();
}
모두 위의 방법에 의해 구동되는 뭔가를해야한다 if, else 조건으로 QueryEngine 이 나오면 수정을 위해 닫히지 않습니다.
어떻게 이러한 동작을 설계 할 수 있습니까? 디자인 문제를 해결하는 동안 따라야하는 접근 방식은 무엇이되어야합니까? 솔리드 원칙이 준수되었는지 여부를 확인해야합니까? 따라서 우리는 디자인 패턴에서 문제를 분류하여 해결해야 할 것인가? 제 생각에는
유사한 페이지 여부와
Scope
답변 독립적으로true
또는false
를 처리 할 수 있는지 여부Scope
요청 인터페이스 메소드가 처리 할 페이지를 리턴한다고 말하면'ExcludeScope'로 처리되지 않는 페이지를 반환하는 것은 모순됩니다. – Smutje예, 동의합니다. 이 경우 운영자 기반 접근 방식이 있어야합니까? 제외 연산자는 NOT 연산자와 마찬가지로 모든 페이지에서 OR 연산자를 사용합니까? – themanwhosoldtheworld
컨트롤을 반전시킬 수도 있습니다. 예를 들어'QueryEngine'은 페이지가 처리되고'Scope'이'true' 또는'false'를 반환하면 각 페이지의 스코프를 묻습니다. 그러면 ExcludeScope 구현은 처리하지 않을 페이지 목록을 보유하고 처리해야합니다. – Smutje