清洁架构:服务器上的交互器逻辑

时间:2016-07-26 20:07:47

标签: ios architecture viper-architecture clean-architecture

我一直在玩Clean ArchitectureVIPER

昨天有朋友问我为什么不将Interactor逻辑放在服务器上,只是将处理后的数据同步到iOS客户端,而不是在Interactor上发送原始数据和处理。这将有很多好处,因为能够随意更改逻辑,减少在多个客户端(例如iOS和Android)上复制的代码等。

举个例子,假设我们有一个Profile列表和一个Post列表。每个帖子都有一个图片和一个profileID。

让我们说我们想要一个显示所有帖子的表格视图的屏幕'图像,当用户点击帖子时,我们会在单独的屏幕上显示相应的个人资料。在配置文件中,我们将显示该配置文件发布的名称和所有图像。

如果我们将逻辑留在客户端上,我们就会同步这样的数据:

{
    profiles: [
        {
            id: "...",
            name: "..."
        },
        ...
    ],
    posts: [
        {
            profileID: "...",
            imageURL: "..."
        }
    ]
}

然后我们会有ShowPostsInteractor只返回所有帖子的数据和ShowProfileInteractor,这会过滤帖子'数据只是从该配置文件中获取帖子,然后它会将一些数据返回到视图,如:

{
    name: "...",
    imageURLs: ["...", ...]
}

第二种方法是将此逻辑留在服务器上,在这种情况下同步数据将是:

{
    profiles: [
        {
            id: "...",
            name: "...",
            imageURLs: ["...", ...]
        },
        ...
    ],
    posts: [
        {
            profileID: "...",
            imageURL: "..."
        }
    ]
}

(请注意imageURLs)中添加了profiles

ShowProfileInteractor只会将配置文件数据原样传递给视图,因为它不再需要过滤帖子(这是由服务器完成的)。

当然,第二种方法重复了一些数据,但由于它只是字符串,所以这不是很相关。

我已经看到第一种方法更频繁地完成了。所以我的问题是,为什么我不做第二种方法(在服务器上保留尽可能多的逻辑)并且可能从客户端删除所有交互者,让控制器直接访问网关,因为不会处理数据?

1 个答案:

答案 0 :(得分:1)

我可能错了,但我认为Clean Architecture的设计考虑了移动或SPA应用程序。我一直认为它是一个很好的老式Web应用程序,与服务器端的交互器相关。

理由是架构应该是

  

独立于UI。用户界面可以轻松更改,而无需更改其余部分   系统的。可以使用控制台UI替换Web UI   例如,不改变业务规则

将互动者推向客户端会击败目标,IMO。