2010-06-09 7 views
0

J'ai une interface nommée PropertyFilter qui prenait un Property et décide si elle l'accepte ou non. Et le monde était bon.Problème nommant une interface

Mais maintenant l'interface a changé, de sorte que les implémentations peuvent choisir d'ajouter Property s supplémentaires. Par exemple, une propriété Customer peut être étendue aux propriétés Name et Address.

Je pense qu'il est évident que ce n'est plus un filtre, mais comment appelleriez-vous une telle chose?

Pour clarifier: le soi-disant filtre est à peu près une méthode avec la signature

Property -> List<Property> 

avec une liste vide indiquant ne pas accepter la propriété, une liste avec exactement la propriété d'entrée indiquant l'acceptation de la propriété et une liste avec de nouvelles propriétés (incluant éventuellement l'original) indiquant une expansion.

+0

Cela me semble toujours être un filtre. Un 'Filter [T]' est généralement une fonction 'T -> Boolean' qui semble toujours être. –

+0

Pourquoi vous souciez-vous de Property dans le PropertyFilter? Pourquoi ne pas simplement avoir une interface de filtre? – mathk

+0

@mathk Nous avons choisi PropertyFilter plutôt que Filter parce qu'il y a déjà deux filtres dans notre base de code et environ un gazillion dans la bibliothèque que nous utilisons. Mais la question concerne vraiment la partie Filtre du nom. –

Répondre

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

Avez-vous déjà un nom pour la méthode que vous mentionnez? Cela pourrait nous aider à trouver un nom approprié pour l'interface.

+0

la méthode est actuellement appelée 'expand' –

+0

OK, donc l'interface a une responsabilité mixte de validation et d'expansion des propriétés. Vous pouvez utiliser un nom plus général comme PropertyManager ou PropertyHandler. Ou, vous pouvez diviser les 2 responsabilités dans 2 classes distinctes, PropertyValidator et PropertyExpander avec un appelant l'autre. Je suppose que la solution dépend de la façon dont le code client utilise l'interface, et si le code client est conscient de l'aspect de validation ou de l'aspect d'expansion (ou les deux). – guillaume31

0

Je ne suis pas vraiment sûr de ce que fait votre nouvelle fonction. S'il renvoie toujours un booléen, un autre nom pour une fonction qui renvoie une valeur booléenne est un "prédicat". Si elle prend un client et le décompose (vous avez peut-être une fonction qui prend un client et renvoie un nom, et un autre qui renvoie une adresse), alors je pourrais les appeler "accesseurs". Ce terme est souvent utilisé pour décrire une fonction membre d'un objet, mais je pense qu'il pourrait s'appliquer ici aussi.

+0

Voir ma question mise à jour, prédicat ne rentre pas, je ne pense pas que les accesseurs s'adapte ... –

0

Si Customer a une Name et et Address, plus il n'est plus une propriété , mais une entité .

La Customer propriété pourrait être une référence à une entité Customer, auquel cas la convention sémantique pour votre interface appliquent encore.

-1

Je voudrais ajouter une méthode nommée validate-Property avec la signature:

PropertyFilter -> Bool 

L'implémentation par défaut de validate passe simplement this (la propriété) au filtre et renvoie le résultat:

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

En tant que propriété composée, Customer remplace validate, en l'implémentant en termes de ses propriétés composites:

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

De cette manière, chaque Property peut décrire comment appliquer un PropertyFilter donné à lui-même. Je pense que vous devriez éviter l'approche d'expansion de liste.