Проблема с именованием интерфейса - PullRequest
0 голосов
/ 09 июня 2010

У меня есть интерфейс с именем PropertyFilter, который раньше принимал Property и решал, принимать его или нет. И мир был хорош.

Но теперь интерфейс изменился, так что реализации могут добавить дополнительные Property s. Например, свойство Customer может быть расширено до свойств Name и Address.

Я думаю, очевидно, что это уже не Фильтр, но как бы вы назвали такую ​​вещь?

Для пояснения: так называемый фильтр - это в значительной степени метод с сигнатурой

Property -> List<Property>

С пустым списком, означающим непринятие свойства, списком с точно введенным свойством, обозначающим принятие свойства, и списком с новыми свойствами (возможно, включая исходный), обозначающим расширение.

Ответы [ 4 ]

1 голос
/ 21 июня 2010
  • PropertyChecker
  • PropertyValidator
  • PropertyDistillator
  • PropertyAccreditor ...

У вас уже есть название для метода, который вы упоминаете? Это также может помочь нам найти правильное имя для интерфейса.

0 голосов
/ 21 июня 2010

Я бы добавил метод с именем validate к Property с подписью:

PropertyFilter -> Bool

Реализация по умолчанию validate просто передает this (Свойство) в фильтр и возвращаетрезультат:

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

В качестве составного свойства Customer переопределяет validate, реализуя его с точки зрения его составных свойств:

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

Таким образом, каждый Propertyможет описать, как применить любой данный PropertyFilter к себе.Я думаю, вам следует избегать подхода к расширению списка.

0 голосов
/ 09 июня 2010

Если Customer имеет Name и Address, то это больше не свойство , а сущность .

*Свойство 1010 * может быть ссылкой на Customer сущность, и в этом случае семантическое соглашение для вашего интерфейса все еще применяется.

0 голосов
/ 09 июня 2010

Я не совсем уверен, что делает ваша новая функция.Если он по-прежнему возвращает логическое значение, тогда другое имя для функции, которая возвращает логическое значение, является «предикатом».

Если он принимает Customer и декомпозирует его (возможно, у вас есть одна функция, которая принимает Customer и возвращаетИмя и другое, которое возвращает адрес), тогда я мог бы назвать их «аксессорами».Этот термин часто используется для описания функции-члена объекта, но я думаю, что он может применяться и здесь.

...