Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何将依赖项反转原理应用于角度测量? 我们考虑下面的情景: 您在登录表单中有一个用于密码恢复的按钮,此操作将打开一个具有两个选项的模式:“使用短信恢复”和“使用电子邮件恢复”。根据所选选项,该表单将允许您输入文本以键入电子邮件或手机,以及发送恢复请求的按钮_Angular_Oop_Solid Principles_Dependency Inversion_Angular Dependency Injection - Fatal编程技术网

Angular 如何将依赖项反转原理应用于角度测量? 我们考虑下面的情景: 您在登录表单中有一个用于密码恢复的按钮,此操作将打开一个具有两个选项的模式:“使用短信恢复”和“使用电子邮件恢复”。根据所选选项,该表单将允许您输入文本以键入电子邮件或手机,以及发送恢复请求的按钮

Angular 如何将依赖项反转原理应用于角度测量? 我们考虑下面的情景: 您在登录表单中有一个用于密码恢复的按钮,此操作将打开一个具有两个选项的模式:“使用短信恢复”和“使用电子邮件恢复”。根据所选选项,该表单将允许您输入文本以键入电子邮件或手机,以及发送恢复请求的按钮,angular,oop,solid-principles,dependency-inversion,angular-dependency-injection,Angular,Oop,Solid Principles,Dependency Inversion,Angular Dependency Injection,在Angular中,您可以创建一个将所选方法作为参数的服务,并根据该参数执行恢复密码的操作。 但是,如果添加了更多的方法,则有必要添加更多的条件以发出正确的请求。 根据坚实的原则,你应该依靠抽象而不是细节,这就是为什么你可以做如下事情: 导出接口恢复存储{ recoveryPassword(userId:string):void; } @可注射() 导出类SMSRepositoryService实现RecoveryRepository{ recoveryPassword(userId:strin

在Angular中,您可以创建一个将所选方法作为参数的服务,并根据该参数执行恢复密码的操作。 但是,如果添加了更多的方法,则有必要添加更多的条件以发出正确的请求。 根据坚实的原则,你应该依靠抽象而不是细节,这就是为什么你可以做如下事情:

导出接口恢复存储{
recoveryPassword(userId:string):void;
}
@可注射()
导出类SMSRepositoryService实现RecoveryRepository{
recoveryPassword(userId:string):无效{
//sms实现
}
}
@可注射()
导出类EmailRepositoryService实现RecoveryRepository{
recoveryPassword(userId:string):无效{
//电子邮件实现
}
}
@可注射()
导出类OtherRepositoryService实现RecoveryRepository{
recoveryPassword(userId:string):无效{
//任何其他实施
}
}
和组件:

@组件({
选择器:“应用程序模式恢复”,
templateUrl:“./modal recovery.component.html”
})
导出类ModalRecoveryComponent{
建造师(
private _formBuilder:formBuilder,
私人recoveryRepository:recoveryRepository
) {
/*
.
.
使用FormBuilder的模态表单定义
.
.
*/
}
公共恢复(){
}
}
然后,为了使用SMS实现,我应该在组件中定义一个提供者:

@组件({
选择器:“应用程序模式恢复”,
templateUrl:'./modal recovery.component.html',
提供程序:[{提供:RecoveryRepository,useClass:SMSRepositoryService}]
})
或电邮:

@组件({
选择器:“应用程序模式恢复”,
templateUrl:'./modal recovery.component.html',
提供程序:[{提供:RecoveryRepository,useClass:EmailRepositoryService}]
})
然后调用该方法:
this.recoveryRepository.recoveryPassword()

但是,如果表单中的恢复方法值是动态的,那么如何根据用户选择的是sms还是电子邮件选项更改存储库实例

一个简单的选项是在构造函数中注入服务:

构造函数(
private _formBuilder:formBuilder,
private\u emailRepositoryService:emailRepositoryService,
专用存储服务:SMSRepositoryService
) {
}
公共恢复(){
如果(选项=='SMS'){
此.u SMSRepositoryService.recoveryPassword(idUser);
}否则如果(选项=='EMAIL'){
此.u emailRepositoryService.recoveryPassword(idUser);
}
}

但它与坚实的原则相违背,而且如果我们想到一个更复杂的场景,我们可能不得不更改组件中的许多内容。然后可以有一种工厂,负责根据所选选项更改实例,并使用这个.recoveryRepository.recoveryPassword(userId)为了只依赖抽象类,您只创建了一个公共抽象来联系后端,但这还不够,因为应用程序仍然需要了解具体的策略。设计应用程序,使其以一种不需要了解恢复策略的方式处理抽象。例如,
RecoveryMethod
可能知道如何在UI上显示自己,并在选中时创建自己的对话框。