Синглтон DAL класс - PullRequest
       11

Синглтон DAL класс

4 голосов
/ 14 января 2009

Разве классы в DAL (customerDAL) не должны быть одиночными? Поскольку мои контроллеры (customerController) предоставляют «Shared Subs», то при каждом вызове нет необходимости создавать новый объект DAL, если он уже существует. Правильно?

Спасибо

Ответы [ 4 ]

3 голосов
/ 14 января 2009

Это сильно зависит от архитектуры вашего полного решения. Один синглтон может быть трудно найти, когда у вас много потребителей. Здесь - это список вопросов, которые вы можете учитывать при разработке DAL. Кроме того, существует множество шаблонов DAL, таких как Repository, и некоторые шаблоны, похожие на фасады.

3 голосов
/ 14 января 2009

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

3 голосов
/ 14 января 2009

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

0 голосов
/ 14 января 2009

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

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

Что касается DAL, объекты не подлежат расширению. Они должны полагаться на использование пула соединений и затем запрашивать соединение из пула каждый раз, когда нужно выполнить команду.

Конечно, существуют разные шаблоны, и вы должны в основном использовать ORM, если запрос не нуждается в настройке для повышения производительности.

См. NHibernate , SubSonic , Linq2Sql , Entity Framework (еще не выпущен?) И т. Д.

...