2010-06-09 6 views
0

PropertyFilter이라는 인터페이스가 있는데이 인터페이스는 Property을 사용하고 받아 들일지 여부를 결정하는 데 사용됩니다. 그리고 세상은 좋았습니다.문제점 인터페이스 이름 지정

이제 인터페이스가 변경되어 구현시 Property을 추가 할 수 있습니다. 예를 들어 Customer 속성은 NameAddress 속성으로 확장 될 수 있습니다.

필자는 필터가 더 이상 없다고 생각하지만 어떻게 그런 식으로 부르는 것이 좋을까요?

는 명확히하기 : 소위 필터는 빈 목록 속성 정확히 입력 속성이 속성과 목록을 받아들이 나타내는있는 목록을 받아들이 나타내는하지으로 서명

Property -> List<Property> 

꽤 많이하는 방법입니다 확장을 나타내는 새로운 속성 (가능하면 원래 속성 포함).

+0

여전히 필터처럼 보입니다. 'Filter [T]'는 대개이 함수가있는 것처럼 보이는'T -> Boolean' 함수입니다. –

+0

PropertyFilter에서 Property에 관심을 갖는 이유는 무엇입니까? 왜 단순히 필터 인터페이스가 없습니까? – mathk

+0

@mathk 필터 기반 PropertyFilter는 코드베이스에 이미 두 개의 필터가 있고 우리가 사용하는 라이브러리에 gazillion이 있기 때문에 선택합니다. 그러나 질문은 실제로 이름의 필터 부분에 관한 것입니다. –

답변

1
  • PropertyChecker
  • PropertyValidator
  • PropertyDistillator
  • PropertyAccreditor ...

이미 당신이 언급 방법의 이름을 가지고 있습니까? 인터페이스에 대한 적절한 이름을 찾는 데 도움이 될 수 있습니다.

+0

메서드가 현재 '확장'이라고되어 ​​있습니다. –

+0

OK, 인터페이스의 유효성을 검사하고 속성을 확장해야하는 혼합 책임이 있습니다. PropertyManager 또는 PropertyHandler와 같은 좀 더 일반적인 이름을 사용할 수 있습니다. 또는 2 개의 책임을 PropertyValidator와 PropertyExpander의 두 클래스로 나누어서 하나를 다른 클래스로 호출 할 수 있습니다. 클라이언트 코드가 인터페이스를 사용하는 방법과 클라이언트 코드가 유효성 검사 측면 또는 확장 측면 (또는 둘 다)을 인식하는지 여부에 따라 솔루션이 달라질 것입니다. – guillaume31

0

새로운 기능이 무엇인지 잘 모르겠습니다. 여전히 부울을 반환하면 부울 값을 반환하는 함수의 다른 이름은 "술어"입니다.

고객을 데려다 분해하면 (고객을 가져 와서 이름을 반환하는 기능과 주소를 반환하는 기능 중 하나가있을 수 있음) "접근 자"라고 할 수 있습니다. 이 용어는 종종 객체의 멤버 함수를 설명하는 데 사용되지만 여기에서도 적용 할 수 있다고 생각합니다. Name과 및 AddressCustomer 경우

+0

업데이트 된 질문, 조건부가 맞지 않습니다. 접근자가 적합하다고 생각하지 않습니다 ... –

0

는 그것은 더 이상 특성하지만 기업 없습니다.

Customer 속성은 사용자 인터페이스에 대한 의미 론적 규칙이 여전히 적용하는 경우에 Customer 엔티티에 참조 수 있습니다.

-1

나는 서명 Propertyvalidate라는 방법을 추가 :

def validate (filter: PropertyFilter) = filter (this) 
:

PropertyFilter -> Bool 

validate의 기본 구현은 단순히 this 필터에 (속성)를 전달하고 그 결과를 반환

복합 속성으로 Customervalidate을 무시하고 복합 속성으로 구현합니다.

override def validate (filter: PropertyFilter) = name.validate (filter) && address.validate (filter) 

이렇게하면 각 Property은 주어진 PropertyFilter을 적용하는 방법을 설명 할 수 있습니다. List 확장 방식을 피해야한다고 생각합니다.