Должен ли класс Service быть единственным в Java? - PullRequest
10 голосов
/ 29 декабря 2011

При разработке класса обслуживания он должен быть одноэлементным в Java?Как правило, DAO делается одноэлементным, поэтому должен ли вызывающий класс Service также быть сделан одиночным?

Ответы [ 3 ]

8 голосов
/ 29 декабря 2011

ИМХО да, сервисы не должны удерживать состояние и поэтому должны быть сделаны одноэлементными.

1 голос
/ 29 декабря 2011

Синглтоны плохие, если вы их развиваете. Если вы используете внедрение зависимостей, позвольте контейнеру DI обрабатывать одноэлементную природу вашего объекта Service. Если вы не используете внедрение зависимостей, используйте статический метод вместо одиночного.

Классический пример плохого:

public class HootUtility // singleton because developer was a goofball.
{
   ...
   public void blammy(...) { ... }
   public HootUtility getInstance() { ... }
}

... somewhere in the code.

HootUtility.getInstance().blammy(...);  // This is silly.

Лучшая реализация вышеперечисленного:

public class HootUtility // Not a singleton because I am not a ______. (fill in the blank as you see fit)
{
  // You can limit instantiation but never prevent instantiation.
  // google "java reflection" for details.
  private HootUtility()
  {
    throw new UnsuppotedOperationException();
  }

  public static void blammy(...) { ... }
}

... somewhere in the code.

HootUtility.blammy(...);

Если у вас есть интерфейс службы, который имеет конкретную реализацию, используйте инфраструктуру внедрения зависимостей для внедрения реализации (структуры DI включают: spring и guice).

Редактировать: Если бы я использовал пружину, я бы выбрал одноэлементную область (по умолчанию).

0 голосов
/ 29 декабря 2011
нет

Нет

На самом деле я считаю, что вы не должны заботиться об этом во время дизайна. Как и упомянутая @ DwB упомянутая DI инфраструктура должна выполнять эту работу. Кроме того, я считаю, что no scope ("prototype") должно быть по умолчанию, и я не вижу ничего плохого, если кто-то создаст его сам. Кроме того, эта проблема может быть упрощена за счет модульности и разделения интерфейса службы и реализации, как описано в рекомендациях.

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