【发布时间】:2020-07-22 21:43:03
【问题描述】:
我正在尝试遵循架构 Bob 的叔叔原则。主要概念是外层取决于内层,但并非如此。
所以,我的顶层是发出 http 请求的服务:
export class ApplicationService {
constructor(private http: HttpClient, private applicationAdapter: ApplicationAdapter) {}
getDetails(id: string): Observable<ApplicationResponse> {
return this.http.get<Application>(`${environment.apiUrl}/applications?id=${id}`).pipe(
map((data: any) => {
return {
application: this.applicationAdapter.adapt(data.application)
}),
);
}
}
在这里我得到响应并将其发送到适配器ApplicationAdapter:
@Injectable({
providedIn: 'root',
})
export class ApplicationAdapter implements Adapter<Application> {
constructor(private datePipe: DatePipe) {}
adapt(item: any): Application {
return new Application(item, this.datePipe)
}
}
适配器返回具体型号Application:
export class Application {
constructor(
public statename: string,
public dt: Date
public others properties...
private datePipe: DatePipe,
getFormattedData(): string {
return this.datePipe.transform(this.dt);
}
}
由于 myt 结果模型 class Application 依赖于 private datePipe: DatePipe 我必须从 ApplicationAdapter 开始传递此依赖项:
constructor(private datePipe: DatePipe) {}
return new Application(item, this.datePipe);
然后最终模型Application 让它在方法getFormattedData(): string; 中使用
所以,我认为这是架构违规,因为适配器不应该知道依赖private datePipe: DatePipe。在这种情况下,我的实体(Application)依赖于内部依赖,这违反了原则。
你能解释一下,如何解决这个问题,也许我错了!
【问题讨论】:
标签: angular architecture