从Web网站回退到从命令行:用领域驱动设计构建软件最关键的业务内核

摘要:本文分享一个后端工程师的实践:通过领域驱动设计(DDD)先抽象出 Chatbot 的核心领域模型,剥离 Flask、前端 JS 及移动平台 API 等"壳子",实现业务内核与技术实现解耦,为跨平台迁移奠定坚实基础。


从Web网站回退到从命令行:用领域驱动设计构建软件最关键的业务内核

背景:开发自用智能多模型对比的Chatbot,受挫并且收到启发。

起初:被"完整工程"拖垮的尝试

我最早想做一个能记住我说过的话、回答问题、帮我整理知识的 Chatbot。

作为后端开发者,我习惯性地搭了一个"标准项目":

  • 后端用 Python Flask
  • 前端用 原生 JavaScript(没用任何框架)
  • 甚至在前端自己实现了简单的 MVC:Model 管消息数据,View 渲染对话,Controller 处理输入

结果呢?

我花了大量时间处理 Flask 路由、JSON 序列化、DOM 更新、前后端联调......而真正关心的业务逻辑------对话理解、记忆存储、意图识别------几乎没动

更糟的是,代码越写越重,改一点就怕崩,进度严重受阻。

转折:回到命令行,只写核心

我果断停掉 Web 部分,新建一个 core.py,写下类似于以下的最朴素的类:

python 复制代码
class ChatSession:
    def __init__(self):
        self.memory = []

    def send_message(self, text: str) -> str:
        if "记住" in text:
            self.memory.append(text)
            return "已记住!"
        elif "回忆" in text:
            return "你让我记了:" + "; ".join(self.memory)
        return "我不太明白......"

再加个 while True 循环,在终端里直接交互。
几小时就跑通了核心功能

如果你感兴趣,你可以看我的开源项目 notfresh/multisource-chatbot: 自己做的chatbot,使用302.ai支持的后台服务,可以同时调用deepSeek和千问

那一刻我意识到:

Flask、JS、MVC,都是壳子;真正的智能,藏在这些类和方法里。

这正是 领域驱动设计(DDD)的核心思想
先聚焦领域模型(ChatSession、Memory、Intent),剥离技术实现细节(HTTP、DOM、框架)

延伸:从 Android 到 iOS 的迁移启示

后来,我又想到:我之前用 AI 辅助做过几个 Android 版工具 App ,现在想迁移到 iOS

如果直接让 AI "翻译" Kotlin 到 Swift,几乎注定失败------因为平台架构、API 设计差异太大。

但有了 Chatbot 的经验,我换了个思路:

第一步:提取与平台无关的核心实体

问自己:这个 App 到底在做什么?

比如一个笔记工具,核心是:

  • Note(标题、内容、标签)
  • NoteRepository(保存、查询)
  • SyncService(云端同步)

这些用伪代码或 Python 写出来,不依赖任何移动 SDK

第二步:明确核心业务流程

  • 创建笔记 → 本地存储 → 触发同步
  • 搜索关键词 → 返回匹配结果

这些流程在 Android 和 iOS 上应该一致。

第三步:分层隔离,核心独立

把上述模型组织成 纯领域层,它不关心:

  • 是用 Activity 还是 ViewController
  • 是用 Room 还是 Core Data
  • 是用 Retrofit 还是 URLSession

它只关心:数据怎么变,规则是什么

第四步:为每个平台编写适配器

在 iOS 侧,再分别实现:

  • 用 SwiftUI 构建 UI(View 层)
  • 用 Core Data 实现 NoteRepository
  • 用 URLSession 实现网络同步

平台 API 只是外壳,是可以替换的实现细节

总结:内核稳定,壳子可换

无论是做 Web、命令行,还是跨 Android/iOS,我都验证了一件事:

软件的可演进性和可迁移性,取决于你是否先把领域核心抽象清楚。

  • Flask 是壳子
  • 原生 JS 是壳子
  • Android SDK 是壳子
  • iOS UIKit 是壳子

只有那些表达业务本质的实体、聚合、服务,才是不可替代的内核

现在,我的 Chatbot 依然运行在 shell 里,每天帮我记事、问答。

未来如果需要 Web 或移动端,我只需套一层适配器------内核不动,天下不乱

对个人开发者而言,先让领域跑起来,比先让界面跑起来更重要

而 DDD,就是帮你守住那个"核心"的思维罗盘。

相关推荐
无心水1 天前
【分布式利器:腾讯TSF】6、TSF可观测性体系建设实战:Java全链路Metrics+Tracing+Logging落地
java·分布式·架构·wpf·分布式利器·腾讯tsf·分布式利器:腾讯tsf
郑州光合科技余经理1 天前
架构解析:同城本地生活服务o2o平台海外版
大数据·开发语言·前端·人工智能·架构·php·生活
郑州光合科技余经理1 天前
开发实战:海外版同城o2o生活服务平台核心模块设计
开发语言·git·python·架构·uni-app·生活·智慧城市
廋到被风吹走1 天前
【Spring 】Spring Security深度解析:过滤器链、认证授权架构与现代集成方案
java·spring·架构
tech-share1 天前
【无标题】IOMMU功能测试软件设计及实现 (二)
linux·架构·系统架构·gpu算力
阿巴~阿巴~1 天前
从IP到MAC,从内网到公网:解密局域网通信与互联网连接的完整路径
服务器·网络·网络协议·架构·智能路由器·tcp·arp
de之梦-御风1 天前
【视频投屏】最小可用(MVP)局域网投屏”开源项目架构
架构·开源·音视频
无心水1 天前
【分布式利器:腾讯TSF】3、服务注册发现深度解析:构建动态弹性的微服务网络
网络·分布式·微服务·架构·分布式利器·腾讯tsf·分布式利器:腾讯tsf
China_Yanhy1 天前
金融级企业出口网关架构设计与实施指南Enterprise Egress Gateway Architecture & Implementation Guide
运维·金融·架构
阿巴~阿巴~1 天前
帧长、MAC与ARP:解密局域网通信的底层逻辑与工程权衡
linux·服务器·网络·网络协议·tcp/ip·架构·以太网帧