"动态"编程逻辑:这种灵活性的合理性有多大

230 天前
 ZekeChin

reddit 刷到的一个帖子发现 原来大家都有一样的烦恼,V 站的朋友们怎么看 https://www.reddit.com/r/AskProgramming/comments/1cmkf0m/dynamic_logic_in_code_is_this_flexibility_worth_it/

译文如下

在我最近的一份工作中,我注意到我们的代码库中有大量的"动态"逻辑。例如,我们通过动态提取列名来管理具有不同模式的多个 SQLite 文件,而不是为每个模式进行版本控制。基本上,用户查询可以在不同的数据库上执行,而我们并不需要提前知道数据库上有哪些表格/列。这样的优点是我们不需要为每个数据库写新的逻辑,创建这些数据库的团队也不需要与我们(后端)同步,API 可以"直接"透明地访问数据库内容。所以这种策略被认为是"更灵活的"。

然而,我发现这使得理解、测试和编写代码文档变得更加困难。向后兼容性的提供也变得更困难,或者在必要时定制后端的行为也更为复杂。例如,假设我们在数据库上有一个user.full_name列,但 API 必须返回两个分开的字段(first_namelast_name)。现在的情况是,代码被修改以添加大量的if语句(例如:if column_name == "full_name": ...),向后兼容性变得非常困难。

我有一种感觉,所有这些"动态"的代码在理论上听起来很聪明、很酷,但实际上它变成了一个负担。这是一个众所周知的问题,还是我理解错了?我想向我的团队阐述我为什么认为这是一个问题,但我缺乏参考文献。你能提供一些我可以用来分享我的观点的信息吗?这种做法有一个名字吗?有关代码"动态性"的最佳实践是什么?

3943 次点击
所在节点    程序员
28 条回复
lambdaq
229 天前
用户查询可以在不同的数据库上执行,而我们并不需要提前知道数据库上有哪些表格/列


mongodb: ......

es: .....

pg hstore: ....

pg jsonb: .....

innodb json: .....

sqlite: https://sqlite.org/draft/jsonb.html
murmur
229 天前
@tool2dx 一个 split 解决的问题为什么用到 if/else ,这是我没法理解的
NoOneNoBody
229 天前
GUI 编程,特别是主观输入(如搜索),是需要很多动态的判断,或者说人机交互
如果“动态”不够,搜索会限定在一些固有条件内,搜索结果会“混乱”,这个混乱指的是使用者的感受,而不是编程者的认为

例如媒体管理搜索,输入“东野圭吾”,在输入者的角度,他想搜索的是“根据东野圭吾小说改编的影视作品”,这个搜索方向是 tag ,因为 title 基本不存在“东野圭吾”这个关键词,后者搜不到结果

人(用户)是万变的,如果模式固定了,也限定了人只能按有限的固定方式交互,体验难以提升
很需要对使用者的输入进行一次“理解”,再选择对应的路子,随着 AI 的发展,这项工作可以交给 AI 优化,但目前来说还不算好的方案,一是本地部署还不容易,二是 AI 理解还不算强,例如上例“东野圭吾”几个字并不是一个句子,AI 需要广泛知识才能“领悟”,最重要还是 AI 成本还很高

“东野圭吾”还存在变数,简体、繁体、日语汉字……等等,这里刚好繁体和日语汉字是相同的,但“黑泽明”呢

我自写的一个媒体管理就遇到上述问题(还有更多),导致输入搜索这块一直做不好,是目前最大瓶颈
yy77
229 天前
感觉应该是对于每个不同类型的数据写类,然后通过依赖注入来在上层保证操作的统一性。
teaegglove
229 天前
Less is more
liuidetmks
229 天前
全自动化 不如 半自动化。
james122333
229 天前
@teaegglove

这也可以讲成
三十辐 共一毂 当其无 有车之用
james122333
229 天前
@teaegglove

其实我是觉得中文讲的比较贴切

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1038960

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX