Переход к конструктору или создание

Хотя оба варианта верны, но какой из следующих способов рекомендуется:

public class MyService(MyRepository ...) {
    ...
}

или

public class MyService() {
    myRepository = CreateMyRepository();
}

protected MyRepository CreateMyRepository() {
    ...
}

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

1
0
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это зависит от ваших требований, но я бы порекомендовал, как показано ниже в примере.

Публичный конструктор полезно при внедрении зависимостей.

Защищенный конструктор может использовать свой собственный класс и подклассы (полезно в Шаблон проектирования Singleton). Это также полезный конструктор для абстрактного класса.

Частный конструктор может использоваться в собственном классе и гарантирует, что не должно быть более одного объекта (полезно в Шаблон проектирования Singleton, Шаблон проектирования Builder).

 class MyService {
      private MyRepository myRepository;

      public MyService(MyRepository myRepository){
          this.myRepository= myRepository;  

      }

      public String getMyRepository() { return myRepository; }

       public void setMyRepository(MyRepository myRepository)
       {    
       this.myRepository= myRepository;
      }

    }
Ответ принят как подходящий

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

Также смотрите больше Что такое внедрение зависимостей?

Другие вопросы по теме