Java - Бизнес-сервис, объекты доступа к данным - Должны ли использоваться Singletons или нет? - PullRequest
2 голосов
/ 06 декабря 2010

Рассмотрим веб-приложение с бизнес-уровнем и уровнем доступа к данным.Таким образом, каждый запрос должен быть пропущен через эти два слоя для обработки.

Поскольку будут поступать частые запросы, нет смысла создавать новые бизнес-объекты и объекты доступа к данным для обработки каждого запроса.В этом случае, как правило, я склоняюсь к синглетонам бизнеса и DAO.

Но я слышу много проблем при использовании шаблона Singleton, что многие предлагают против шаблона (главным образом потому, что он глобальный).В таком случае, какова будет правильная стратегия проектирования для сценария, который я описал выше?

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010

Объекты обслуживания должны быть Singleton.

Вы можете использовать Spring для обслуживания одноэлементных сервисных объектов.

2 голосов
/ 06 декабря 2010

Обычная стратегия, используемая в таких случаях, состоит в том, чтобы записывать бизнес-сервисы и объекты доступа к данным не как одиночные, а как простые POJO.А затем используйте контейнер для управления областью действия классов.Некоторыми примерами контейнеров являются Spring и Guice.Вы даже можете написать свой собственный контейнер, если ваши требования просты.

Таким образом, вы получаете преимущества одноэлементного паттерна без его недостатков (трудно подделать, проверить и т. Д.).

Простой пример:

public class PersonService {
    public Person getPerson(String id) {
        //find and return the person
    }
}

public class PersonServiceSingletonFactory {
    private PersonService service = new PersonService();
    PersonService getInstance() {
        return service;
    }
}
0 голосов
/ 06 декабря 2010

Я не думаю, что написание синглетонов в Servlet - это хорошая идея, вы можете создать свою бизнес-логику в ServletContextListener, это будет гарантировать, что в контейнере будет выполняться только один экземпляр объекта, и он поточно-ориентирован.Вы можете получить к нему доступ, как объяснил @ abhin4v.Если вы не используете Spring Framework, это то, что вам нужно сделать.

Надеюсь, это поможет.

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