Должен ли я использовать Enums как дискриминатор? - PullRequest
4 голосов
/ 30 ноября 2009

Когда перечисления ломаются?


Чтобы поддержать новую функцию в существующей системе, я просто рассматривал возможность реализации какой-либо формы дискриминатора для таблицы сущностей в моей схеме базы данных.

Чтобы начать с наименьшего количества работ, которые я сработал, я в первую очередь выбрал целочисленный столбец и перечисление C # на уровне бизнес-объектов для удобства чтения. Это обеспечило бы полиморфизм бедняка, который в конечном итоге может перерасти в настоящий полиморфизм и, возможно, к образцу Стратегии.

Я решил проконсультироваться с блогосферой, поскольку я никогда не чувствовал себя комфортно при использовании перечислений - я подумал: а не пропустить ли это перечисление и перейти к структуре или классу?:

Прежде всего, я нашел утверждение, что ' Enums is Evil ', но я чувствовал, что это было чрезмерное обобщение, которое напрямую не касается моего варианта использования.

Если я пойду за перечислением, то есть хорошее обсуждение того, как я могу увеличить пробег , добавив дополнительные метаданные в мое перечисление.

Далее я натолкнулся на дискуссии Джимми Богарда о Классах перечисления , а затем обсудил в ' Стратегии и дискриминаторы в NHibernate '

Должен ли я пропустить перечисления и сразу перейти к классам перечисления? Или у кого-нибудь есть какие-либо другие предложения о том, как добавить простой объектный дискриминатор в мою модель домена.

Обновление:

Я бы также добавил, что как NHibernate, так и LINQ to SQL (и, вероятно, все другие методы доступа к данным, связанные с ORM) делают использование перечислений очень заманчивым, так как они позволяют прозрачно отображать столбец дискриминатора в отображении.

Было бы так просто сопоставить класс перечисления?

Смежные вопросы:


Отказ от ответственности:

Несмотря на мое небрежное использование термина «сущность» (в нижнем регистре «е»), я не претендую на то, что обсуждаю здесь DDD ...

Ответы [ 2 ]

4 голосов
/ 30 ноября 2009

Сегодня перечисления являются злом, завтра ООП может быть злом, и АОП будет в порядке.

Просто используйте правильный инструмент для работы. Помните, Сохраняйте это простым ...

Если перечисление просто для описания типа объекта - не беспокойтесь, используйте его.

Если в нем есть какая-то бизнес-логика, то, вероятно, это другой класс.

2 голосов
/ 30 ноября 2009

Эти классы перечисления выглядят аккуратно, я часто ревниво смотрел на перечисления Java.

Я думаю, что применяются обычные правила: делай самое простое, что могло бы сработать. Если вы обнаружите, что в перечислении более одного switch, то это запах, и пришло время рассмотреть шаблон, который вы нашли.

В противном случае, зачем обременять себя тем, что вам не нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...