Слабая связь против жесткой связи услуг - PullRequest
0 голосов
/ 09 июня 2018

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

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

export class Test(){

dataResults;

constructor(service: testService){

this.dataResults = service.getData()

}

}

1 Ответ

0 голосов
/ 09 июня 2018

Тесная связь означает : написанный код зависит только от одного класса, например, если я напишу

service:TestService;
constructor(){
this.service = new TestService();
this.dataResults = service.getData()
}

код выше тесно связан, потому что если завтра, если я хочу заменить TestService с ActualService, мне нужно открывать файлы, которые потребляют TestService и должны вносить изменения.

Теперь Слабая связь обратная жесткая связь, значит класс независит непосредственно от класса, обслуживание которого он потребляет.В языке более высокого порядка, таком как C #, для слабой связи код пишется так:

public class A{
  A(IB service) {//here IB is interface , on which A class is depedant
   //use service here 
  }
}

public class B : IB { }
public class C : IB { }

, так что теперь ID зависит от IB, вы можете легко сделать это

A a = new A(new B());
or 
A a = new A(new C());

, так что создайте его так, чтобыA зависит от IB, который может быть B или C. Таким образом, он становится слабо связанным с B и C.


Теперь перейдем к вашему коду, какой угловой код,

В угловом, когда мыиспользовать любую услугу в нашем компоненте, мы регистрируем ее через провайдера либо в модуле, либо в компоненте.

[{ provide: Logger , useClass: Logger}]

, а затем в компоненте он используется как

constructor(service: Logger){
  this.dataResults = service.getData()
}

Теперь завтра, еслиЯ хочу заменить Logger на BetterLooger. Мне просто нужно сделать это

[{ provide: Logger , useClass: BetterLogger}]
or 
[{ provide: Logger , useClass: TestLogger}]

, не добавляя код компонента, вот так он становится слабосвязанным.Или даже очень полезно при тестировании компонентов, где требуется заменить actul service на MockService (проверьте здесь: https://angular.io/guide/testing)

, чтобы выше работало BetterLogger and TestLogger должно быть расширено Logger. Вы можетеперейдите туда и проверьте подробно: https://angular.io/guide/dependency-injection

Далее читайте: Внедрение зависимостей и SOLID

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