【问题标题】:Api to Business Model Conversion in MVVMMVVM 中的 Api 到业务模型的转换
【发布时间】:2020-01-18 22:41:46
【问题描述】:

我正在尝试在我的新应用中实现 MVVM 结构。我有以下几层。

  1. AViewControler
  2. AViewModel
  3. 经理
  4. 网络管理器
  5. 缓存管理器
  6. 变压器

我的视图控制器完美地完成了它的工作,即渲染 ui 并为更改更新视图和视图模型。

现在当我需要调用 api 时。 ViewController 要求 Viewmodel 获取数据。它要求 Manager(repository) 获取数据。 Manager 调用 NetworkManager(全应用通用)调用 api 并获取数据。

Manager 还使用 body 和 queryparams 创建 urlrequest。 Manager 获取 APIModel 并将其转换为 Cachodel 并交给 CacheManager 编写。

My Manager 将 API 模型返回给 viewmodel,并根据其要求,viewmodel 使用 Transformer 层将 apimodel 转换为业务。

现在我很困惑是将apimodel赋予viewmodel还是将其转换为manager layer的businessmodel并将businessmodel赋予viewmodel。

实现这一目标的最佳方法是什么,或者如果我已经在架构中做错了什么。

【问题讨论】:

    标签: swift mvvm business-logic


    【解决方案1】:

    不确定 100% 你的问题,但对我来说,我的控制器只知道 ViewModel。 ViewModel 将调用 Manager (Repository) 来做任何事情(逻辑、网络等),然后让控制器知道刷新、更新、渲染 UI ...... 这样,我可以遵循单一职责原则。

    【讨论】:

    • 除此之外,似乎CachModelBusinessmodel等也应该由ViewModel(或ViewModel内的ViewModel)已知的ViewModels管理.
    • 我应该在哪里将 apimodel 转换为业务模型。在 Viewmodel 或管理器中。
    • 对我来说,应该在 Manager 中
    • @Jacob。当您的 api 模型和业务模型必须在外部访问并且不能是私有的时,您如何在项目中以不同的方式命名它们。
    • 大部分情况下,业务模型和api模型同名。如果您想澄清并让他们指定使用目的,让api模型成为一个通用名称(可以添加后缀ApiModel,如UserApiModel);对于业务模型,它可以像 UserProfileModel(它可以通过 Transformer 层从 UserAPIModel 生成)。因此,对于不同的业务逻辑(来自不同的屏幕、流程),转换器层将帮助您将模型转换为您的目的。
    猜你喜欢
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2019-11-05
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多