7

我正在使用 MVP 模式和数据层的存储库模式构建一个具有干净架构的 android 应用程序。我对业务对象有点困惑。是否应该在表示中使用一个对象,而在域/数据层中是否应该使用另一种类型的相同对象?如果是这样,那么在何时何地将对象转换为另一种类型?

4

2 回答 2

4

虽然在技术上是可行的,但通常不需要为表示层提供域实体的特殊表示。

有时,当表示层需要将多个实体捆绑在一起时(例如,显示有关两个用户参与聊天的信息),您可能会发现自己处于适当的位置。在这种情况下,您可以定义一个包装器,将所需的实体捆绑在一起。

然而,根据我的经验,这种捆绑很少需要,而且是有代价的:表示层“等待”所有捆绑的数据,即使这些数据的一部分可能已经显示给用户(例如,可以显示一个用户的信息)立即,但从服务器获取有关其他用户的信息)。这会降低应用程序的感知响应能力。

通常,对于客户端应用程序,域对象的方案通常源自用户界面规范。因此,如果您发现自己正在考虑为表示层单独表示域对象,那么应用程序中很可能已经存在以下设计问题之一:

  1. 应用程序中使用的域对象与用于与服务器进行数据交换的域对象相同
  2. 应用程序的需求发生了变化,但领域对象没有相应改变

您总是希望网络层与应用程序的其余部分分离。这包括用于与服务器进行数据交换的方案。如果您的域对象满足服务器 API 施加的约束,但不满足表示层的要求,那么最好在网络层和应用程序的其余部分之间引入“翻译”逻辑。

如果应用程序的需求发生了变化,但领域对象没有相应地更新,那么最好不要对表示层进行单独的表示,而是根据当前的需求审查设计并更新整个应用程序。

于 2017-06-25T15:01:08.040 回答
0

它不是 MVP 模式,但是,这个链接推荐 Here's AndroidCleanArchitectureDemo 很高兴看到上面链接上的开源。

于 2019-07-22T05:56:49.707 回答