Angular 是映射对象、类或服务或静态函数的最佳解决方案



我需要使用转换器将json结果映射到我的本地类对象,所以我对此有一些想法:

  • 创建一个类"JsonResult2TableElementConverter">
  • 创建一个可注入的服务,可以包括项目的所有转换器
  • 创建函数"导出让函数转换Json2Table(("等。

你能告诉我哪个更好吗?可能是另一个? 你有类似的经历吗? 谢谢。

首先,最好在后端进行转换。服务器应为前端返回友好的 DTO。

仅当您在 Angular 中使用实体模型的类时,@JFPicard解决方案才有效。然后,您可以在模型中添加方法,就像在ActiveDirectory模式中一样。

不幸的是,很多人都在使用实体模型的接口。这种方法在 Angular 中有很多好处。在这种情况下,最好将所有内容包装在可注射服务中。稍后您可以通过 Angular DI 机制模拟此服务。是的:

  • 更可测试
  • 更具可扩展性
  • 您可以通过 Angular 的 DI 轻松更改行为

将此逻辑移动到分离的可注入服务会将此逻辑封装在分离层中。封装类中的所有内容会使这个类变胖,而嘲笑这个函数在未来将不那么容易。

在 Angular 中使用不可注入的纯打字稿类(因此它们不是 Angular 服务(并且包含任何应用程序逻辑总是让我感到恐惧。对我来说,这就像在 DI 容器之外创建的 ASP.NET"帮助程序"类,这在以后真的很痛苦。

在我看来,获得转换类违背了 SOLID 的单一可响应性原则。

我认为最好的方法是让本地类对象具有函数或构造函数来获取 JSON 结果来构建类。

因此,转换的责任将由使用数据的类承担。因此,如果您需要修改任何逻辑,则只需接触相关类,而不是具有大量转换函数的大型类。

@Karol 特里布莱克 :

本地类应由可注入服务返回为:

export class TestService {
public constructor (private http: HttpClient) {
}
public callHttp (url: string, parameters: any): Observable<DTOTest> {
return this.http.get(url, {params: parameters})
.pipe<boolean>(map((result) => {
return of(new DTOTest(result));
}));
}
}

最新更新