oop - 哪个设计更好?把这个逻辑放在前端还是后端?
问题描述
我们有一个名为 的 API copy(fileName)
,基本上它将文件从源复制到目标,因为源和目标在同一个地方,所以我们不需要指定它。
现在我们将文件系统拆分到不同的位置,比如A
, B
, C
, D
。我们总是复制到D
,但文件可能来自A
、B
或C
。所以我们需要一些逻辑,比如:
function checkAndCopy(fileName) {
if (fileExistInA) copy from A to D
else if (fileExistInB) copy from B to D
else if (fileExistInC) copy from C to D
}
我想把这个函数放在后端 原因是后端的变化应该封装在 API 中,这样调用者就不需要担心实现细节。
但是我们的后端团队不想维护它,他们只想提供 copyFrom(fileName, source) 的最终版本。所以如果前端不知道源,我建议他们将源作为可选参数或空字符串。一旦我们进行前端更改,我们将始终发送源并从 copyFrom(fileName, source) 中删除空字符串/可选参数逻辑。
后端人员认为使用可选参数或故意传递空字符串是一个糟糕的设计,即使他们知道这是暂时的也不想要它。
那么哪个设计更好呢?
- 将此逻辑放在后端,要么有一个 API 副本(文件名,源)并将源作为可选参数/空字符串传递,要么有 2 个单独的函数,例如 copyFrom(fileName, source) 和 checkAndCopy(fileName);
- 在前端创建一个新函数 checkAndCopy,在后端创建另一个新函数 copy(fileName, source) 并让前端决定调用哪个函数。
请注意我的问题不是关于如何编写函数,而是将这些函数放在哪里。
解决方案
您应该像 copy(source, target)
在 API 中那样进行原子调用。复制功能本身不应与特定目录相关。它的用例是复制,而不是确定目标目录。
推荐阅读
- java - Java 使用 AsynchronousSocketChannel 将 nullbyte (\x00) 作为 1 个字符发送
- swift - 错误“条件绑定的初始化程序必须具有可选类型,而不是'字符串'”试图在 Swift 5、NSTableView 中对列进行排序
- selenium - 在 xpath selenium 中获取这些元素时遇到问题?
- ios14 - iOS14.5 Widget 数据不是最新的
- reporting-services - 如何让 SSRS 2019 中的打印界面表现得像在 IE 中一样
- javascript - 为什么在使用 `require()` 在 Node v12 中运行脚本时`process.execPath` 未定义?
- flutter - Flutter 固定按钮位置
- firebase - 如何从 Firebase 中的 Geopoint 字段获取地址?(扑)
- php - 如何在一个查询中收集有关一项的所有结果
- autohotkey - 如何使用 AutoHotkey 交换冒号键和斜线键?