Я не совсем уверен в Object -lational_impedance_mismatch? - PullRequest
4 голосов
/ 24 февраля 2010

http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch

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

Кажется, что это новая идея, которая процветает, и теперь она кажется прекрасной, но ценность ее заключается в том, чтобы протестировать ее, или я не прав?

Ответы [ 3 ]

3 голосов
/ 24 февраля 2010

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

Тем не менее, аргумент, который обычно возникает в этой точке, заключается в том, что если вы не нашли проблему, то это ваша вина, потому что вы не выполняете «правильную» объектную ориентацию, и что вы найдете несоответствие, когда Вы учитесь правильно ориентировать объектную ориентацию. И все мы знаем, что объектная ориентация является единственной «правильной» парадигмой развития.

Ой, подождите.

Многие системы не подходят для моделирования в виде объектно-ориентированных систем. Фактически, для таких вещей, как веб-приложения, которые обычно имеют низкую сложность (с локализованной высокой сложностью) и требуют высокой степени параллелизма и масштабируемости, использование сервис-ориентированных методов и методов передачи сообщений может быть лучшим вариантом. Когда приложение написано таким образом, вы, как правило, обнаруживаете, что несоответствия между объектами не слишком много, потому что вы не используете такие вещи, как отложенная загрузка и сложные иерархии объектов, а ваши объекты неизменны, поэтому они не необходимо уничтожить обратно в базу данных.

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

0 голосов
/ 24 февраля 2010

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

В качестве примера, скажем, класс Foo определяет свойство foo. Бар подклассов Foo, и вводит панель свойств. Как вы храните Foos and Bars в базе данных?

У вас может быть таблица Foo, содержащая поля foo и bar ... и каждый Foo будет удовлетворять "bar IS NULL". Но если ваш подкласс вводит целый ряд свойств, это расточительно.

Так что, может быть, у вас есть два стола Foo и Bar. Вы копируете все столбцы в Foo в Bar, чтобы можно было загрузить весь Bar за один SELECT? Или вам нужно присоединиться к Foo с Bar, чтобы загрузить Bar?

Полное сопротивление относится к тому факту, что вам нужно подумать обо всех этих маленьких деталях того, как вы «измельчаете» (используя термин Грега Бича) объект в одну или несколько таблиц.

0 голосов
/ 24 февраля 2010

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

Когда вы начнете правильно выполнять ОО и пытаетесь отобразить эти отношения в СУБД, вы поймете проблему.

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