Тесная связь означает : написанный код зависит только от одного класса, например, если я напишу
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