Синглтон дал класс
Разве классы в DAL (customerDAL) не должны быть синглетными? Так как мои контроллеры (customerController) предоставляют "общие суб", то при каждом вызове нет необходимости создавать новый объект DAL, если он уже существовал. Правильно?
Спасибо
4 ответа:
Синглетные объекты, как известно, трудно проверить. Я бы посмотрел на создание вашего DAL таким образом, что это не дорого, чтобы создать экземпляр, а затем создать новый по мере необходимости. Таким образом, Вы сможете писать модульные тесты для DAL гораздо проще и при этом не нести больших накладных расходов. Кроме того, если вы создаете DAL как синглтон, вам нужно будет гораздо больше заботиться о том, чтобы сделать его потокобезопасным, если вы используете его в многопоточной среде (например, в веб-приложении).
Если у вас есть веб-сайт, одноэлементные объекты dal очень опасны, потому что каждый запрос на сайт является частью одного и того же приложения. Если вы построите их неправильно, они могут стать узкими местами для доступа к базе данных.
Это сильно зависит от архитектуры вашего полного решения. Один синглтон может играть трудно получить, когда у вас есть много потребителей. здесь приведен перечень вещей, которые вы можете рассмотреть при проектировании DAL. Кроме того, есть много шаблонов DAL, таких как хранилище, и некоторые фасады, такие как шаблоны.
Синглтон следует использовать только в том случае, если вы хотите убедиться, что только один экземпляр класса когда-либо создавался в экземпляре вашего приложения.
Синглтона едва ли можно было считать запахом кода. Большинство людей, которые используют Синглтон, используют его плохо. Поэтому, когда вы видите его, есть большой шанс, что он не используется должным образом.Что касается DAL, объекты не являются экспансивными для создания. Они должны полагаться на использование пула соединений, а затем запрашивать соединение у пул каждый раз, когда команда должна быть выполнена.
Конечно, существуют различные шаблоны, и вы должны в основном использовать ORM, если запрос не нуждается в настройке для повышения производительности.
См. NHibernate, дозвуковая, Linq2Sql, Entity Framework (еще не выпущен?), прием.