1

Dans mon application Django, j'ai un modèle (appelons-le Foo) avec un champ appelé "type". Je voudrais utiliser Foo.type pour indiquer le type de l'instance spécifique de Foo (les choix possibles sont "Number", "Date", "Single Line of Text", "Multiple Lines of Text", et quelques autres) .Comment implémenter correctement le pattern Strategy dans un framework web MVC?

Il y a deux choses que j'aimerais que le champ "type" finisse par affecter; la façon dont une valeur est convertie de son type normal en texte (par exemple, dans "Date", il peut être str(the_date.isoformat())), et la façon dont une valeur est convertie du texte au type spécifié (dans "Date", il peut être datetime.date.fromtimestamp(the_text)). Pour moi, cela ressemble au schéma de la stratégie (je peux me tromper complètement, et n'hésitez pas à me corriger si je le suis). Ma question est, quelle est la bonne façon de coder cela dans un cadre web MVC?

Dans une application côté client, je créer une classe Type avec les méthodes abstraites "serialize()" et "unserialize()", redéfinir ces méthodes dans les sous-classes de Type (telles que NumberType et DateType) et dynamiquement définir le champ "type" d'un Foo nouvellement instancié à la sous-classe Type appropriée à l'exécution.

Dans un cadre web, ce n'est pas aussi simple pour moi. À l'heure actuelle, la façon la plus logique consiste à définir Foo.type en tant que champ Small Integer et à définir un ensemble limité de choix (0 = "Number", 1 = "Date", 2 = "Single Line of Text", etc.) dans le code. Ensuite, lorsqu'un objet Foo est instancié, utilisez une méthode Factory pour regarder la valeur du champ "type" de l'instance et branchez la sous-classe Type correcte (comme décrit dans le paragraphe ci-dessus). Foo aurait aussi des méthodes serialize() et unserialize(), qui délégueraient directement à la sous-classe Type branchée.

Quelle est la qualité de ce design? Je n'ai jamais rencontré ce problème auparavant, alors j'aimerais vraiment savoir si d'autres personnes l'ont fait et comment ils l'ont résolu.

Répondre

0

Vous pourriez regarder à travers les choses d'héritage que le django ORM fournit. Cela vous donnera les moyens de sous-classement fait quel que soit le modèle w/discriminateurs, tables différentes, etc.

Foo # base 
DateFoo(Foo) 
OtherFoo(Foo) 

etc ...

+0

Je ne suis pas 100% par rapport à cette solution, mais je me méfie de sous-classe Foo pour chaque nouveau type que je veux. Je n'ai pas de bonne raison pour ça, ça ne me semble pas juste dans cette situation. Je vais le garder à l'esprit cependant. Merci beaucoup pour répondre. – jakeboxer

Questions connexes