2017-04-13 47 views
4

我一直在学习角2几个星期。我有一点困惑。请比较的数据是如何存储/这里分享:Angular 2服务:在哪里保存数据

https://github.com/Apress/pro-angular-2ed/blob/master/Angular%202.0/08%20-%20SportsStore%20-%20Orders%20and%20Checkout/SportsStore/app/model/product.repository.ts

这里:

https://github.com/gothinkster/angular2-realworld-example-app/blob/master/src/app/shared/services/comments.service.ts

第一个链接显示它是如何在亚当·弗里曼的书叫“临角”来完成。我们可以看到有一个名为ProductRepository的服务,这就是所有产品都存储的地方。这个服务有一个构造函数,它从另一个服务初始化它的数据,名为StaticDataSource(稍后在本书中更改为从其余api获取数据)。所以总结一下:我们有一个组件,它被注入了一个名为ProductRepository的服务。然后它使用该服务中的getProducts()方法来接收所有产品(实际上这些产品只存储在该服务的数组中)。

现在让我们看一下第二个环节:

在这里,我们有一个CommentsService。这次数据不存储在这个服务中。我们只需要调用getComments()方法,然后再执行api服务中的另一种方法。 所以总结一下:我们有一个组件(ArticleComponent),它被注入了CommentsService。然后它调用该服务的getComments(),实际上每次调用时都会向服务器发送一个http.get请求。


现在我的问题是关于这些方法和后果之间的差异。根据我的理解,在第一种情况下,所有数据都从服务器获取一次(应用程序加载时),然后将其全部存储在名为SomethingRepository(ProductRepository等)的服务中。 然而,在第二个链接中,我们每次使用服务(在任何组件中),都会直接从服务器接收数据。

关于它的最佳实践是什么?我只是担心,如果我们使用本书中介绍的方法,那么我们不会总是获得“最新”的可能数据,因为如果另一个客户在此期间发生了某些变化,那么我们仍然会处理在我们的应用正在加载。另一方面,第二种方法可能会影响我们在组件之间共享数据的可能性。

我对此非常困惑,我不确定是否应该将整个模型保存在我的应用程序中,并且有某种存储库,或者第二种方法更好。感谢您的任何帮助。

回答

3

产品的集合是不太可能在你的网站上花费的时间来改变。在这种情况下,它与实际缓存获得的数据相关得多。

的意见的集合,例如在活动留言板,可以在单一页面访问期间改变多次。这可能是他们选择在获得收藏品时始终致电该服务的原因。尽管在我看来,这不是正确的做法。更好的办法是使用websocket连接,并从服务器更新集合,而不是每次都获取集合,很有可能没有任何变化。

Sooooo,总结起来,它取决于个案,收集到集合,您想要使用哪种缓存。但是我的建议是只能调用一次服务器,如果它是静态数据(如产品阵列)。当它是动态数据时,你应该使用websocket来维护集合

2

不幸的是,随着大多数软件开发的进行,哪种方法更好的答案是:“取决于”。

正如您已经明确指出的那样,存储数据客户端的方法存在的风险是,如果另一个用户更改了某些内容,就会冒着本地缓存过时数据的风险。无论是否重要取决于应用程序和缓存的数据类型以及数据更改的频率等。但是,从每次不必到服务器获取列表的角度来看,您都会获得更好的性能。某些类型的数据对于以这种方式缓存更安全(例如,美国各州的名单,甚至是一个产品目录,这些目录不是太大,并且不会一分钟改变) - 对于其他应用程序,您无法负担得起陈旧的数据。

因此,我的外卖将是使用最适合手头数据的方法。很多时候,处理缓存失效的复杂性并不值得它所带来的性能好处,但这绝不是一个你可以在所有情况下使用的全面声明。了解不同的方法以及利益和折衷方案,以便了解何时应用哪种技术。

PS。这个问题可能因为基于意见而被封闭。它可能更适合:http://softwareengineering.stackexchange.com