如何设计一个大后台给所有业务提供后端服务?

2020-12-20 09:38:15 +08:00
 dream4ever

我目前在传统企业做 Web 开发,但干活的人少,所以我其实是“全干工程师”,前后端项目的技术选型我有完全的自主权。

目前我负责的几项业务,都是完全的前后端分离,后端部分用的 Express + MongoDB 提供服务。业务代码写多了,就会发现有不少通用的部分,比如好几个网站都有账号+密码注册功能,不同的只是各网站需要提交哪些字段、各字段是否必需、字段格式要求等等。

所以我现在就在想,是否可以把这类普遍的需求通用化?比如说通过配置文件或者其他方式,来定义各个业务的用户注册功能有哪些字段,各字段是否必需,字段的格式要求等等之类的需求。不同网站的用户注册请求从前端发送过来之后,后端调用对应网站的配置文件进行检查,通过各项检查的,再调用同一个更底层的用户注册功能,将用户信息写入数据库。

这里只是以用户功能中的注册子功能举例,其他各项功能也希望实现同样的需求。对于这类偏实战的需求,有什么好的轮子值得借鉴?虽然也经常刷 GitHub,但在上面看到的各种后端框架,普遍都是 Express 、Koa 这种提供业务无关的功能的框架。而如何结合实际业务来开发各种通用的功能模块,满足上面所说的需求,可能是我查找资料的方向不对,目前还没找到这方面的资料。不过这种需求应该很普遍,可能很早就有人做出来了,只是我不知道而已,欢迎大家指点。

PS:技术栈不需要局限于 Node.js ,Java 、Go 也完全 OK 。

4636 次点击
所在节点    问与答
39 条回复
wangxiaoaer
2020-12-20 11:52:17 +08:00
提醒下,小业务别瞎捷豹折腾微服务。
dream4ever
2020-12-20 12:04:24 +08:00
@rockyou12 我们是部署到自己的阿里云服务器,服务器的运维也是我来负责的。
xuanbg
2020-12-20 13:04:51 +08:00
这不是中台的初衷吗?把分散的、重复、通用的能力抽象出来,重新组织成各种中台。
opengps
2020-12-20 14:31:02 +08:00
你要的这个功能,就是阿里正在提倡的大中台思路
johnsona
2020-12-20 15:40:04 +08:00
用微服务就等着加班吧
johnsona
2020-12-20 15:42:38 +08:00
写一个包不就好了,搞好面向对象,用继承,公共部分父类、自己实现子类,可以看看 django 的做法,内置用户模块,扩展的话一对一表扩展,authentication,覆写 auth 函数
janxin
2020-12-20 16:19:45 +08:00
super graph
sujin190
2020-12-20 16:53:36 +08:00
然后配置文件越来越复杂,就变成了一门新语言,这不就是 php 的发展过程么,所以别想太多了,功能复制性和编码简洁性不可兼得,啥事不干就能支持各种业务的事情就是意淫
dream4ever
2020-12-20 16:56:42 +08:00
@sujin190 哈哈,“啥事不干”不至于,主要是想把那些变化的部分和稳定的部分分离开来,主要还是架构设计的能力。
taowen
2020-12-20 17:08:55 +08:00
把样板代码提取成代码生成器,用 JSON 文件配置给代码生成器做参数。如果参数太多了,就果断回退回纯手写。不要试图写过分通用的生成器,在你有限的几个项目里能够复用得到收益就好了。
sujin190
2020-12-20 17:14:58 +08:00
@dream4ever #29 如果想这样的话,良好的微服务抽象是最好的,想要啥部署啥就是了,就算想着分支定制维护成本也不高,不行就取其次就是框架封装和模块封装,通过配置文件这种真的是极其不靠谱,现实就是有可能所有需求百分之九十九都是相同的,但是就那个百分之一不同就有可能取消全部重做,配置文件啥的在这种事情上的处理能力极其弱
felixin
2020-12-20 17:36:27 +08:00
@janxin 这个看起来挺不错的,有什么坑吗,准备下个项目试试
lishen226
2020-12-20 17:42:00 +08:00
多个项目有通用功能?用户注册?复制粘贴不就行了?还用搞这么麻烦?
你说的应该是不同项目的需求都是相似的增删改查吧,这样的可以做成动态配置的,前提是项目需求都比较简单,数据量小。我自己造过类似的轮子,很简单,一个业务表,一个配置表,业务表预留好足够多的字段,然后再配置表里根据不同的业务配置不同的字段信息。
xuanbg
2020-12-20 18:20:39 +08:00
@johnsona 我司上了微服务后就基本不加班了。。。写几行 crud 的八股代码,至于要加班么
janxin
2020-12-20 20:13:26 +08:00
@xuanbg 那贵司之前为什么加班的…
xuanbg
2020-12-20 21:02:05 +08:00
@janxin 屎山代码,到处都是耦合的逻辑,改一个 bug 会产生 n 个 bug……
dream4ever
2020-12-21 08:45:28 +08:00
@sujin190 开发维护完全都是我一个人,而且前后端都要做,感觉微服务对目前的我来说有些重,我先做好封装吧,多谢指点 ^_^
night98
2020-12-21 10:58:31 +08:00
可以参考下很多大厂的统一身份认证服务,就是你接入他们的 sdk 之后,账户体系和权限都在他们那边定义好就能直接用了,你如果想这样设计整个系统的花,可以参考他们的设计方式。各个应用以接入的形式加入系统
charlie21
2020-12-22 12:36:20 +08:00
请问你说的前后端分离是哪种前后端分离?
参考 http://www.woshipm.com/pmd/3342034.html
前后端分离 是指 前端可以直接调用 WEB API 完成网站功能么?那么作为从零开发的网站,应该先完成前端部分 or 先完成后端( WEB API )部分,还是 按照功能 比如功能 1 的前端+后端,再完成功能 2 的前端+后端

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

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

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

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

© 2021 V2EX