不要造轮子
今年 MidJourney 的大火,给我们开了很多眼界,它竟然连一个就是它连正经的网站没有,核心的交互都在 Discord 上完成
还有前阵子在 X 看到这些帖子,受到一些启发:
很多程序员都喜欢造轮子,事事都想自己亲力亲为,其实大可不必。仔细想想对于用户来说、对于自己来说什么才是最重要的?
如何按照 DDD 说法,我们最应该重视的是系统的核心域,这是我们资源应该集中投入的地方,而对于通用域和支撑域,能外包出去就外包出去,能用现成的就用现成的。
比如像 Midjourney
来说,核心域就是文生图,像用户、社区、付费等通用子域,利用现成的 SaaS 服务既能节省成本,可能还能出奇招。
那我这篇文章到底想讲什么?就是想告诉大家🤫 :不要造轮子、不要造轮子、不要造轮子,怎么简单怎么来。
把精力放在有价值的事情上,支撑域和通用域尽量外包,它们可能比你想象的要专业。不管是商业的SaaS ,还是开源方案我们都有很多选择。
我先讲讲我的经历,关于 DDD 领域建模。在公司 DDD 的推广前期,很多开发者都使用 ProcessOn 这样的画图工具,按照建模约定拖拖拽拽画图, 例如下面:
原本 Java 语法就比较啰嗦,引入 DDD 后,类变多了,样板代码更是直线上升。后面我们就想,能不能画完图就能生成模板代码
呢?
于是一班人就想要开发一个可视化建模工具,还有对应的代码生成器。
如果从零开发这套建模编辑器
,工程量可想而知,比如基于 AntV G6 (内部有一套流程编排可视化引擎,使用的就是 G6) 这些方案。
后面我就提议,为啥不用现有的画图工具呢,为啥要造轮子呢?比如开源画图工具。经过调研之后,我们发现 draw.io
基本能够满足产品 MVP
的需求。
draw.io 支持自定义组件:
这些组件支持很多控制参数
,可以在绘制上提供一些基本约束:
另外组件还支持自定义数据:
draw.io 最终输出的 XML 结果,里面包含了组件的数据、以及组件之间的关系。 足够解析生成代码了:
那我们建模结果保存在哪里呢?
一班人又扯着搞个 SaaS、怎么版本管理、怎么多人协作、怎么同步、怎么保证跟代码关联起来(DDD 就是领域驱动设计,领域模型图应该和代码设计映射起来)…
越搞越复杂…
其实大可不必,建模结果直接存在版本库里面,跟随代码走不就好了?
因此本文,我们模仿上的那条 X,站在前端的角度,如果我不会后端,或者不想写后端代码,或者想快速开发一个产品 MVP,我们有哪些攻略?
我就举一些当下比较流行的例子,仅供参考,你也可以自己探索更多的方案,欢迎在评论区分享
CMS
CMS是内容管理系统(Content Management System)的缩写。它是一种用于创建、管理、发布内容的软件应用。内容可以是文本、图片、音频、视频等各种格式。使用CMS,即使没有编程知识,用户也可以轻松地管理网站内容。
传统的 CMS 代表主要有 WordPress、Joomla、Drupal。
随着前后端分离的架构模式的流行,以及前端框架的发展, Headless CMS的概念和实践开始被广泛接受和采用, Headless CMS 的代表有 Contentful、Sanity、Strapi、Ghost 等等
如果你要做的业务正好在 CMS 的命中场景(比如企业网站、新闻、博客、社区、订阅列表、记账等等),那么对于前端开发者来说,不妨选择这些 Headless CMS 方案,可以帮助我们快速将产品搭建起来。
除此之外你也可以考虑使用一些在线表格
的方案, 比如 AirTable、Google Sheets、Notion 等等。这些在线表格已经非常强大和灵活了, 利用这些平台提供的 API, 可以很容易地将数据集成到你的网站应用中。
前端侧也有专门面向 CMS 场景的框架, 比如 Astro。当然 Next.js、Nuxt.js、Remix、Gastby… 也是不错的选择
后端服务
如果你不熟悉后端开发,也有很多 SaaS 产品来代替它们, 比如国外这些大名鼎鼎的产品:
- Firebase
- AWS Amplify
- Vercel
国内也有腾讯云 CloudBase、微信云开发、阿里云 EMAS 、uni-cloud 这类的方案。基于 Serverless 提供一站式后端开发服务, 一条龙解决资源存储、数据库、API、托管、运维、监控等等问题。
甚至一些方案还包揽了登录授权、内容审核、权限管理、支付…
不过就是钱的问题。
低代码
如果你连前端都不想写,那么可以尝试一下低代码方案。前后端一站式解决….
低代码是过去几年比较火(卷)的概念, 相关的产品多如牛毛,国外有 OutSystems、Mendix、Microsoft Power Apps、Builder.io 、Retool …
国内有 WeDa、钉钉宜搭、网易 CodeWave….
这里就不一一列举了。
文档
我们真需要自己打一个文档站点吗?大部分情况真没必要,直接用语雀、Notion、Github Wiki、GitBook 之类的搞起来就行了。
到底是内容重要还是形式重要呢?
如果你真想搭建一个文档站点,也应该优先考虑 VitePress、Gastby、Docusaurus 这些静态网站生成器。
数据可视化
如果要做数据分析、数据可视化、报表、数据 Dashboard, 有很多开源的方案, 比如 Grafana、Metabase、Power BI….
这些工具都很强大,也是通过‘低代码’的方式,实现丰富多彩的图表、统计需求
站点托管
- GitHub Pages:适合托管个人、组织或项目站点的静态网页。免费用户可以创建无限数量的仓库。
- Netlify:为开发人员提供一个端到端的平台,用于构建、部署和托管用户界面。
- Vercel:适合前端开发人员,特别是使用Next.js, React.js等构建的项目,提供持续部署和服务器渲染。
- Firebase Hosting:适合托管移动应用内容和静态网站,提供快速、安全和可扩展的全球性基础设施。
- GitLab Pages:与GitHub Pages类似,可以托管静态网站和单页应用。
- Surge:专为前端开发人员设计的简单、单一命令的发布工具。
…
发现更多方案
你能想到的需求, 大概率别人已经做了,不管是技术问题还是产品问题,而且比你更加专业 。如上图(来源LUMAscape),展示的是市场营销相关的 SaaS 矩阵。
所以,抬头看看吧,我们有很多选择。选择比埋头努力更重要
所以,我们应该多反问一下自己, 我们的核心域是什么?不管是宏观的产品策略上、还是微观的个人成长上面。
问一问自己,这么值不值得这么做? 我们真的需要吗?投入产出比(ROI)是多少?
如果不值得, 那就外包出去,让更专业的人去做。
专注于自己的核心域,这样才能将自己的时间和精力集中在最能创造价值、或者我们热爱的地方。无论是个人还是企业,我们都无法在所有领域都做到专业。尝试在所有领域都做到专业,最终可能会导致没有哪一方面做得真正出色。
比如一个技术 Leader 核心任务可能是指导团队实现产品的技术开发和优化,以及提供技术方案,而不是微观的代码编码细节。
注意,我不是让你不要折腾。懒惰和折腾绝对是程序员的优点。
程序员绝对是一个爱折腾的群体,大部分出色的程序员都爱折腾
将 Github 当做图床、 将 Discord 作为交互界面、将 Notion 作为 CMS… 这些脑洞就不是一个正常的产品能想出来的…
再如那些反复折腾、造个不停的轮子:静态网站生成器、个人博客、RPC、前端的状态管理器、视图框架、构建工具、编程语言…
这让我想起《黑客与画家》里面的一些话:黑客真正想做的是设计优美的软件。创造优美事物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。
折腾起来吧,黑客!
编不下去了。就这样吧。你可以通过下面这些链接探索更多的替代方案:
- RunaCapital/awesome-oss-alternatives
- GetStream/awesome-saas-services
- georgezouq/awesome-saas
- Product Hunt – The best new products in tech.
- LUMAscapes | LUMA Partners
本文特别鸣谢 ChatGPT
!