我正在阅读http://misko.hevery.com/attachments/Guide-Writing%20Testable%20Code.pdf(尤其是第 8 页)并观看 Misko 关于编写可测试代码的 Youtube 视频,我想到 Angular 的方式DI 是否强迫你违反得墨忒耳法则。
从 PDF 中简化,一个违反得墨忒耳定律的 Java 构造函数示例:
class AccountView {
boolean isAdmin;
AccountView(AccountService) {
isAdmin = AccountService.getCurrentUser().getProfile().isAdmin();
}
}
因为该类只需要用户是否是管理员,而不需要 AccountService。
似乎 Angular 用它的 DI 强迫你打破得墨忒耳定律。我看不到以下内容的替代方案:
.controller('AccountServiceController',
['AccountService',
function(AccountService) {
this.user = AccountService.getCurrentUser().getProfile().isAdmin();
}]
);
如果这是一个控制器,我们可以注入一个用户,它是一个控制器,一个具有解析参数的路由器,但不适用于一般情况。有什么想法吗?请注意,我假设只有 AccountService 是一个单例,并且每个后续对象都是一个实例(并且不能是 DI)。