2009-10-06 5 views
1

Dans la base de données que vous avez une table avec un champ de bits, laissez appeler ce champ actifcomment appelez-vous cet anti-modèle?

Dans l'application que vous avez une valeur booléenne variable laisser appeler NotActive

Chaque fois que vous obtenez le champ de la table, dans l'application vous avez changer la signification de la variable.

NotActive = !mytable.active; 

Un autre exemple serait un champ de bits dans la base de données nommée Enable__yes__no et dans le code que vous ne

control.enabled = !mytable.Enable_yes_no 

meilleures pratiques serait de conserver le même nom et la même signification, mais le modèle ci-dessus, comment appeler ça?

+1

Ce n'est pas un motif. Les patrons sont des descriptions des meilleures pratiques dans diverses situations. C'est une mauvaise programmation, un anti-pattern au mieux. – Lazarus

+0

a changé de tag et de titre à anti-pattern – Fredou

+0

@Sinan, je vais annuler votre modification car j'ai édité ma question en même temps. Juste mettre à jour ma question mise à jour – Fredou

Répondre

12

Je ne nommerais pas les variables booléennes avec un préfixe négatif.

Nommez la variable IsActive ou Active, en la nommant NotActive est double négation.

Modifier/Précision:

Si vous devez vérifier si la chose est actif, vous avez besoin d'une double négation:

If (!NotActive) { DoSomething() } 

Les noms de variables positives booléens sont beaucoup plus faciles à comprendre:

If (isActive) { DoSomething() } 
+1

Double négociation? Voulez-vous dire Double Négation? –

+0

+1: J'allais aussi le dire. L'appel d'une variable NotXXX est le mauvais modèle. Bon point. Un meilleur nom serait désactivé. –

+2

Renommez simplement la variable IsNotNotActive. Maintenant, la logique est à nouveau positive. –

6

Obfuscation par conception?

+1

Non-desobfucation par sorta-design aussi connu comme NDeso_DesgnPoo – mjv

3

Rétrocompatibilité avec les bases de données existantes?

+0

Désolé Alex mais êtes-vous sérieux ici? – Lazarus

0

Je pense que le problème ici est dans l'architecture, pas dans la dénomination spécifique des données. Par exemple, si vous utilisiez un framework d'entité, votre entité pour cette table pourrait déclarer une propriété appelée InActive et utiliser la colonne Active comme datastore. En ce qui concerne le monde extérieur, la traduction est transparente.

1

Il est largement connu comme le "motif de confusion spaghetti pas-négatif" et a été mentionné en 1972. ;-) SCNR

Questions connexes