Помогите мне связать наследование и реляционные понятия - PullRequest
7 голосов
/ 27 августа 2009

Я говорил с моим приятелем-программистом о наследовании и его использовании при проектировании моделей. Он большой сторонник, а я немного прохладнее. Главным образом потому, что я склонен проектировать системы снизу вверх: База данных -> Приложение -> Презентация (честно говоря, я не очень интересный человек, поэтому часто оставляю презентацию целиком кому-то другому). Я считаю, что системы реляционных баз данных не поддерживают наследование без большого количества взаимно однозначных связей с другими таблицами.

Если я проектирую с концептуальной точки зрения, Администратор - это Пользователь, это Персона. Начиная с базы данных, администратор - это пользователь с UserType = "Administrator". Согласование этих подходов мне кажется трудным, и поэтому я использую наследование только с непостоянными объектами.

Что не так с моим мышлением? Почему наследование является таким часто прославляемым аспектом ОО, если оно имеет эти врожденные несовместимости с традиционными реляционными структурами? Или я не правильно сопоставляю наследование с реляционными данными? Есть какое-нибудь руководство, которое могло бы прояснить это для меня?

Извините за бессвязный вопрос и заранее спасибо за ваши ответы. Если вы включите код в свой ответ, C # - мой «родной язык».

Ответы [ 11 ]

0 голосов
/ 27 августа 2009

Да, наследование, вероятно, не тот инструмент, когда вы отображаете базу данных и из нее.

Наследование гораздо более полезно при создании каркасов, в которых у вас есть разные типы объектов, которые ведут себя по-разному, но при этом они имеют общие части.

Например, вы можете передавать разные «сообщения» между одним сервером и другим. Каждое сообщение имеет свою логику, поэтому вам нужны разные классы (чтобы избежать огромного оператора switch ()), но есть общие части, такие как тот факт, что каждое сообщение должно знать, как сериализовать / десериализовать себя в поток (который является Метод все подклассы сообщения должны переопределить). Кроме того, наличие всех сообщений, унаследованных от Message, позволит вам получить список List, а также переходить по одному и вызывать их метод Serialize, например.

Но если все, что вы делаете, - это типичная бизнес-логика / логика БД, то наследование, скорее всего, встанет у вас на пути.

...