Quand les énumérations s'interrompent-elles ?
Pour prendre en charge une nouvelle fonctionnalité dans un système existant, j'envisageais simplement d'implémenter une forme de discriminateur dans une table d'entités dans mon schéma de base de données.
En voulant commencer par faire la moindre chose qui fonctionnera, j'ai tout d'abord choisi une colonne entière et une énumération C# au niveau de la couche d'entité commerciale pour des raisons de lisibilité. Cela fournirait le polymorphisme du pauvre qui pourrait éventuellement se transformer en un véritable polymorphisme et peut-être vers un modèle de stratégie.
J'ai décidé de consulter la blogosphère car je n'ai jamais été tout à fait à l'aise avec l'utilisation des énumérations - je me suis demandé si je devais sauter l'énumération et aller directement à une structure ou à une classe ? :
Tout d'abord, j'ai trouvé une affirmation selon laquelle 'Enums are Evil', mais j'ai senti que c'était une généralisation excessive qui ne concerne pas directement mon cas d'utilisation.
Si je choisis une énumération, il y a une bonne discussion sur la façon dont je peux étendre mon kilométrage en ajoutant un supplément métadonnées à mon enum.
Ensuite, je suis tombé sur les discussions de Jimmy Bogard sur Enumeration Classes et discuté plus en détail dans 'Stratégies et discriminateurs dans NHibernate'
Dois-je sauter les énumérations et passer directement aux classes d'énumération ? Ou quelqu'un a-t-il d'autres suggestions sur la façon d'ajouter un discriminateur d'entité simple à mon modèle de domaine.
Mise à jour:
J'ajouterais également que NHibernate et LINQ to SQL (et probablement toutes les autres méthodes d'accès aux données liées à ORM) rendent l'utilisation des énumérations très attrayante car elles vous permet de mapper une colonne discriminante de manière transparente dans le mappage.
Serait-il aussi simple de mapper une classe d'énumération ?
Questions connexes:
- /492096/persisting-data-suited-for-enums
- /746812/meilleures-pratiques-pour-l'utilisation-et-les-énumérations-persistantes
Avertissement:
Malgré mon utilisation négligente du terme entité (avec un 'e' minuscule), je ne prétends pas discuter de DDD ici...
2 réponses
Ces classes d'énumération ont l'air soignées, j'ai souvent regardé jalousement les énumérations de Java.
Je pense que les règles habituelles s'appliquent : faites la chose la plus simple qui puisse fonctionner. Si vous vous retrouvez avec plus d'un switch
sur l'énumération, alors c'est une odeur et il est temps de considérer le modèle que vous avez trouvé.
Sinon, pourquoi vous encombrer de quelque chose dont vous n'avez pas besoin ?
Aujourd'hui, les énumérations sont mauvaises, demain la POO pourrait être mauvaise et AOP ira bien.
Utilisez simplement le bon outil pour le travail. N'oubliez pas, Keep It Simple...
Si l'énumération sert uniquement à indiquer le type d'un objet, ne vous embêtez pas, utilisez-la.
S'il contient une logique métier, il s'agit probablement d'une autre classe.
Questions connexes
Questions liées
De nouvelles questions
.net
N'utilisez PAS pour les questions sur .NET Core - utilisez plutôt [.net-core]. Le framework .NET est un framework logiciel conçu principalement pour le système d'exploitation Microsoft Windows. Il comprend une implémentation de la bibliothèque de classes de base, du Common Language Runtime (communément appelé CLR), du Common Type System (communément appelé CTS) et du Dynamic Language Runtime. Il prend en charge de nombreux langages de programmation, notamment C #, VB.NET, F # et C ++ / CLI.