服务端复杂项目超长代码该如何组织呢?

2020-08-04 10:28:34 +08:00
 vertigo

如题,最近我在整理之前写的项目,发现有一个接口的代码越发出现失控的趋势(一个请求已经一百多行了),想请教一下大家是怎么处理这种问题的

项目是一个社区程序,用户回复一个主题后首先要

  1. 对内容进行审核(看是否有黄暴或者攻击词汇)
  2. 筛选关键 tag
  3. 如果附带图片,图片内容审核
  4. 如果是匿名回帖还要生成随机昵称
  5. 如果是匿名私信还要处理私信内容
  6. 处理回复者和发帖人的积分变动
  7. 如果主贴超过一定回复数同步到其他社交平台等等
  8. 数据库处理入库

要做的内容非常的多,但是能抽象成单独函数的貌似只有审核和生成昵称,其他大部分都无法复用

但是我总觉得一个请求接口就这么老长,是不是我写项目的方式不对?

请各位大神指教

项目使用 Flask+Mongo

4777 次点击
所在节点    程序员
60 条回复
seki
2020-08-04 10:30:54 +08:00
你的逻辑就是这样,那就这么写咯

如果想不到怎么优化就先别优化,过早优化的效果不一定会那么好
hunter2015
2020-08-04 10:38:36 +08:00
拉面条就对了,优化,啥是优化
2kCS5c0b0ITXE5k2
2020-08-04 10:43:53 +08:00
才 100 多行嘛 还好啦
lower
2020-08-04 10:44:00 +08:00
才一百多行……就敢叫超长代码?😀
vertigo
2020-08-04 10:47:34 +08:00
@lower 啊?不然呢...我一般超过 40 行就有点受不了了
IceBay
2020-08-04 10:50:32 +08:00
无法复用为什么就不能拆呢?
kop1989
2020-08-04 10:57:44 +08:00
没想好就先别动。千万别把代码设计和所谓“行数”做强关联。
你把他们都抽象出来看似接口只有几行了,其实是掩耳盗铃。
buffzty
2020-08-04 10:59:04 +08:00
四十行就受不了只能说明你没写过大项目. 你去看看 mysql oracle 源码
四十行? 你说的是一个小函数里面的括号吗
gz911122
2020-08-04 11:07:59 +08:00
不要过分拆分看着更累.
逻辑清晰按步骤走就行了
wysnylc
2020-08-04 11:18:09 +08:00
经验太少,过几年你就知道怎么写屎了
angryfish
2020-08-04 11:18:18 +08:00
感觉逻辑挺清晰的啊
ppphp
2020-08-04 11:22:38 +08:00
没文档不清楚上下文就是这样的,吃过的奥利给多了,就香起来了
vertigo
2020-08-04 11:26:59 +08:00
@kop1989 是的,我也是这样理解的,不能为了设计而设计.所以才有这种疑惑
lijsh
2020-08-04 11:31:14 +08:00
积分变动和同步社交内容这个可以搞成事件或者消息吧
Vegetable
2020-08-04 11:33:51 +08:00
100 行的超长代码可还行?
每一个步骤可以分开,哪怕不能复用也可以抽象一下,不是过度设计,只是为了让逻辑更有层次方便理解。不会各种语句堆在一起,看着眼花。
xuanbg
2020-08-04 11:43:45 +08:00
每个功能抽象一个方法,接口负责调用这些方法。有些方法还可以异步处理,进一步减少接口响应时间。
WebKit
2020-08-04 11:47:32 +08:00
40 行??我移动端传参数就 10 几行
VictorJing94
2020-08-04 11:49:10 +08:00
.............骚年,见过几万行的函数嘛
hoyixi
2020-08-04 12:01:05 +08:00
你这里好几个步骤都是子功能 or 单独模块,别的地方都会用到,你这里不过调用一下罢了
Jackeriss
2020-08-04 12:42:24 +08:00
不是能复用才抽函数呀,函数可以让代码逻辑更清晰

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

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

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

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

© 2021 V2EX