наилучшая практика для функции, которая взаимодействует с базой данных - PullRequest
0 голосов
/ 15 декабря 2011

Скажем, у меня есть User объект, который генерируется Usermapper. Объект User ничего не знает об используемой базе данных / хранилище (что я считаю хорошим дизайном).

При создании User я хочу, чтобы он был заполнен картографом самыми тривиальными вещами, например, Имя, адрес и т. Д. Однако после создания экземпляра объекта у меня может появиться метод userX.getTotalDebt(), getTotalDebt() потребуется переподключиться к базе данных, поскольку я не хочу, чтобы эта относительно дорогая операция выполнялась для каждого экземпляра пользователя (необходимо несколько таблиц так далее). Если бы я просто вставил немного sql в getTotalDebt() или зависимость обратно в Mapper, где связность очень быстро нарастает.

Существует очевидная хорошая / лучшая практика для этого, потому что часто возникает такая ситуация, однако я не могу ее найти, или я смотрю на эту проблему полностью под неправильным углом.

1 Ответ

0 голосов
/ 15 декабря 2011

Скажем, у меня есть объект User, который создается Usermapper.Объект User ничего не знает об используемой базе данных / репозитории (что я считаю хорошим дизайном).

Их часто называют POCO (простые старые объекты CLR).

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

Существует несколько слоев OR / M, которые могутдостичь этого.Сначала используйте код nhibernate или Entity Framework 4.1.

У меня может быть метод userX.getTotalDebt (), getTotalDebt () потребуется для повторного подключения к базе данных

Затемэто больше не Поко.Хотя возможно использование прозрачного прокси.И EF, и nhibernate поддерживают это, и это называется Lazy Loading.

Существует очевидная хорошая / лучшая практика для этого, потому что часто возникает такая ситуация, однако я не могу ее найти или яглядя на эту проблему полностью под неправильным углом

Я обычно держу свои объекты тупыми и отсоединенными.Я использую шаблон Repository (даже если я использую nhibernate или другой orm), поскольку он делает мои классы тестируемыми.

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

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