编码模式:对自定义模型的数组进行排序应该在模型中还是在服务中?

时间:2018-12-31 04:49:23

标签: angular

我有一个名为Place的模型,该模型在具有构造函数的类中定义。它具有诸如latlng之类的属性。我有一些函数可以处理该模型上的数据,这些函数包含在模型中的models文件夹中名为place.ts的文件中。现在,我有一项可与Places配合使用的服务,例如下载,存储等。

我有一个函数,该函数根据传递的属性排序(等级,与用户的距离等)来排序并返回位置Place[]的数组。

该函数应该放置在模型或服务中以获得良好的设计模式吗?由于仅操作Place,因此我一直在考虑该模型,因为javascript Array方法就是这样做的。

2 个答案:

答案 0 :(得分:1)

它归结为共享资源的概念。如果您的模型Place.ts将在多个服务之间共享,那么将功能放入模型中会更好。否则,您会将其作为private function放在服务本身内部。

答案 1 :(得分:0)

我强烈建议使用管道对数组进行排序,您可以在多个组件中使用同一管道,从性能的角度来看(更改检测)管道也更好,

例如,角形排序管道。

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'sortBy'
})
export class SortByPipe implements PipeTransform {
    transform(data: Array<any>, args?: any): any {
        return data.sort(function(a, b) {
            if (a[args] < b[args]) {
                return -1;
            } else if (a[args] > b[args]) {
                return 1;
            } else {
                return 0;
            }
        });
    }
}

排序运算符js(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

关于管道的重要性,有一篇不错的文章,您可以根据需要阅读,(https://codeburst.io/angular-tips-the-importance-of-pipes-49be3b1e99e7) 希望这会有所帮助。