我必须构建一个angularJS webapp并找到许多最佳实践资源,但仍有一些问题没有得到解答。我希望你能帮助我。
问题1:模型
有一件事是,我应该在哪里存储我的模型并处理它的变化? 我发现了一些不同的解决方案,但它们都是针对简单的数据结构。我有类似用户的东西--->订阅--->设备---> HardwareReport。这只是数据结构树的一个分支。 我的问题是我应该在哪里存储它,以便每个Controller都可以访问数据。
当前解决方案:
当前的解决方案不是存储数据结构,而是为每个对象类型提供服务,如 UserService 或 SubscriptionService 。 并且每个服务都处理与后端服务器的通信,并将返回值保存在缓存中。
缺点: 如果控制器需要例如用户的所有设备,则它必须处理所有服务,并且不能仅通过数据结构树。如果一个控制器改变例如用户的设备对象,该怎么办?我应该如何通知其他控制器?
问题2:延迟配置/实例化服务
以下是该应用程序的一部分。
我有一个 AppController , LoginController 和一个 MapController 。
我有一个 BackendService ,它封装了API调用,并由 UserService 和 SubscriptionService 使用。
当我登录我的webapp时, LoginController 使用 SessionService 来验证登录数据并接收API的accessToken。 必须在 BackendService 中设置此accessToken才能添加到标头中。 但BackendService已经注入其他服务。
当前解决方案: 只需从LoginController设置AccessToken,如
BackendService.setAuth(accessToken);
由于服务是单件服务,因此使用 BackendService 的所有其他服务都将具有正确的设置 BackendService 。
缺点: 在设置访问令牌之前,我可以调用 BackendService 的函数,这会导致错误。
**替代解决方案:** 我只是实现了一个 BackendServiceFactory ,我可以随时使用它来创建一个新的BackendService实例。所以我可以在登录后在LoginController中创建 BackendService 。
下行:我必须通过我的所有服务和控制器传递此对象,因为它不会被DI注入。
很长的问题,但我希望你能给我一些建议如何构建这个应用程序。