Angular 2(ng2) - 服务vs util,何时使用哪个?

时间:2016-10-17 18:18:26

标签: angular

在查看了许多不同的论坛帖子和示例项目后,人们似乎在服务或实用程序之间选择相同类型的功能。到目前为止我所读到的是人们说服务更好,因为依赖注入会使测试变得更容易。其他人说utils更好,因为它们更快。我想知道是否有任何类型的首选规则关于何时使用服务vs util以及为什么?

以下是从加载的数据中提取表列的示例:

服务

System check identified no issues (0 silenced).
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x04E20300>
Traceback (most recent call last):
  File "C:\Python35\lib\site-packages\django\db\backends\base\base.py", line 199, in ensure_connection
    self.connect()
  File "C:\Python35\lib\site-packages\django\db\backends\base\base.py", line 171, in connect
    self.connection = self.get_new_connection(conn_params)
  File "C:\Python35\lib\site-packages\django\db\backends\postgresql\base.py", line 176, in get_new_connection
    connection = Database.connect(**conn_params)
  File "C:\Python35\lib\site-packages\psycopg2\__init__.py", line 164, in connect
    conn = _connect(dsn, connection_factory=connection_factory, async=async)
psycopg2.OperationalError: fe_sendauth: no password supplied

的Util

export class TableService {
  getColumns(data:Array<any>):Array<GridColumnInterface> {
    let columns:Array<GridColumnInterface> = [];

    data.forEach((column:any, index:number) => {
      columns.push({
        headerName: column.name,
        field: String(index),
        hide: column.isHidden,
        class: 'text-center'
      });
    });

    return columns;
  }
}

那么你会选择哪个以及为什么?

1 个答案:

答案 0 :(得分:6)

如果您关心可维护性和可测试性,请使用服务。

如果您遇到分析显示使用该服务占用了大量CPU资源的情况,那么请切换到util-class并使用基准测试来获取正确的数字,以便使用util-classes运行应用程序的速度。如果这会对您的应用程序产生影响(非常不可能btw),那么将该服务类更改为util-class。我会考虑其他一些过早的优化。

我相信,当您能够减少应用对服务器的请求数量时,它将为您的应用程序的用户体验做出更多贡献,然后您将能够使用service vs util。

Angular2 AoT无论如何都会将DI代码转换为静态代码,因此性能改进的可能性不大。