В моем хранилище слишком много логики? - PullRequest
1 голос
/ 10 августа 2010

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

На первый взгляд, я думаю о Repository Pattern. Я передаю свой объект в хранилище и позволяю ему разбивать данные на пять таблиц. Тем не менее, было высказано предположение, что все сопоставление, которое должно быть сделано, добавляет слишком много логики в хранилище. Итак, это хранилище плохой выбор здесь? Должен ли я использовать репозиторий с другим шаблоном (например, адаптером)? Или Репозиторий - правильный выбор в этой ситуации?

Ответы [ 3 ]

3 голосов
/ 11 августа 2010

Шаблон репозитория здесь уместен, но использование Data Mapper , как предлагает DanP, поможет придерживаться принципа единой ответственности.ORM, такие как NHibernate и Entity Framework, обычно облегчают роль Data Mapper, но может оказаться целесообразным реализовать эту логику самостоятельно, если ваше хранилище данных не способствует использованию ORM.

Джефф Моррис предоставляет довольнохороший пример использования Data Mapper в контексте шаблона репозитория здесь .

Для записи, однако, работа ORM состоит в том, чтобы устранить несоответствие объектно-реляционного импеданса 1010 *.Схема реляционной базы данных часто будет отличаться по структуре от модели предметной области.Ваша база данных может быть плохо спроектирована по другим причинам, но отсутствие отношения один к одному между сущностями и таблицами само по себе не должно восприниматься как показатель плохого дизайна.С точки зрения DDD, где база данных считается хранилищем постоянства для домена приложения, база данных может была нормализована соответствующим образом для исходного домена, для которого она была написана.

2 голосов
/ 10 августа 2010

Я думаю, что вам нужен шаблон Data Mapper .Между прочим, вы, вероятно, можете получить немало информации о том, как вручную свернуть доступ к данным в этой серии публикаций от Davy Brion.

Мне интересно, почему бы не взглянуть на что-то подобноеNHibernate вместо того, чтобы пытаться делать всю грязную работу самостоятельно?

0 голосов
/ 10 августа 2010

Может ли помочь шаблон Gateway?Создайте шлюз к старой базе данных.Поместите всю логику преобразования в шлюз.

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