我一直在玩Clean Architecture和VIPER。
昨天有朋友问我为什么不把Interactor
逻辑放在服务器上,把处理后的数据同步到iOS客户端,而不是发送原始数据在Interactor
. 这将有很多好处,因为能够随意更改逻辑,在多个客户端(例如 iOS 和 Android)上复制的代码更少等。
例如,假设我们有一个Profile
s 列表和一个Post
s 列表。每个帖子都有一个图像和一个 profileID。
假设我们想要一个显示所有帖子图像的表格视图的屏幕,当用户点击帖子时,我们在单独的屏幕上显示相应的配置文件。在配置文件中,我们将显示该配置文件发布的名称和所有图像。
如果我们将逻辑留在客户端,我们将像这样同步数据:
{
profiles: [
{
id: "...",
name: "..."
},
...
],
posts: [
{
profileID: "...",
imageURL: "..."
}
]
}
然后我们将有一个ShowPostsInteractor
只返回所有帖子的数据和一个ShowProfileInteractor
,它将过滤帖子的数据以仅从该配置文件中获取帖子,然后它将一些数据返回到视图,例如:
{
name: "...",
imageURLs: ["...", ...]
}
第二种选择是将此逻辑保留在服务器上,在这种情况下,同步数据将是:
{
profiles: [
{
id: "...",
name: "...",
imageURLs: ["...", ...]
},
...
],
posts: [
{
profileID: "...",
imageURL: "..."
}
]
}
(注意添加imageURLs
in profiles
)
并且ShowProfileInteractor
只会将配置文件数据按原样传递给视图,因为它不再需要过滤帖子(这是由服务器完成的)。
当然,第二种方法复制了一些数据,但由于它只是字符串,所以这不是很相关。
我经常看到第一种方法。所以我的问题是,为什么我不采用第二种方法(在服务器上保留尽可能多的逻辑),并且可能从客户端删除所有交互器,让控制器直接访问网关,因为不会处理数据?