从0到1写一个网站(2)需求设计

简介: 这是《从0到1写一个网站》系列第二篇文章。这篇文章主要描述我要做的这个网站的功能,以及我对这些功能的拆分,然后使用事件风暴的方式,归纳出主要的领域模型和领域事件。

这是《从0到1写一个网站》系列第二篇文章。

这篇文章主要描述我要做的这个网站的功能,以及我对这些功能的拆分,然后使用事件风暴的方式,归纳出主要的领域模型和领域事件。


需求描述

整个网站应该分为管理端和门户端。管理端用于我自己在后台管理整个网站,包括发布文章、管理评论等等。管理端需要登录,但不需要做太复杂的权限管理,因为只有我一个用户。

门户端是给其它人用的,也就是大家现在看到的我的个人网站的样子,可以在上面看到我发布的文章,也可以对文章进行评论,对网站留言等等。

管理端

我用思维导图归纳了管理端的主要功能:

网络异常,图片无法展示
|

主要核心的还是文章。但我把标签和素材单独拿了出来,是想到以后网站可能会继续开发新的功能,比如类似于朋友圈、相册、电商等功能。那这样信息分类、文件素材等等能力其实是可以通用的。

除此之外,还对网站版本、公告、邮件订阅等等小功能也有一定的支持。

门户端

网络异常,图片无法展示
|

门户端会相对简单一些,因为很多东西都是只读的,少了很多操作。门户端全程是不需要登录的,包括留言操作。所以这里可能要注意一下安全性的问题,包括防刷和幂等。

在最初设计的时候,我认为有些文章可能是需要密码的,有些页面也可能是需要密码的,比如我们可以把求职简历放在上面。


事件风暴

我使用了事件风暴对整个需求进行了分析,试图寻找可以用于实现这些需求的领域模型、领域行为和领域事件。

我用三种颜色的便利贴来标识它们:

网络异常,图片无法展示
|

最终,我得到了下面9张图:

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

其中,页面配置是想把网站上的一些东西做成配置化的,包括一些页面的背景图和文案等,现在也实现了这个功能:

网络异常,图片无法展示
|

网络异常,图片无法展示
|

按道理说,标签、素材、密码其实也可以放在文章里面,成为文章这个聚合的一部分。但是这里单独拿了出来,是考虑到以后可能会有其它场景也会用到标签、素材、密码。

理论上来说,它们也可以成为单独的领域模型,对外提供服务。事实上很多公司也是这么做的,所谓业务中台,其实就是业务能力的复用。比如标签这个东西,它其实是一个信息管理的能力,既可以用在文章上,也可以用在商品上,还可以用在客户上。

但后来我想了一下,这样做是方便扩展了,但对于现在来说可能会加大开发成本。尤其是在找“标签”和“密码”的时候,我是非常纠结的。

于是,我砍掉了一些不那么核心的领域模型,更聚焦在核心的领域模型上面。最终剩下这么6个领域模型:

网络异常,图片无法展示
|

那标签和素材怎么办?


还是简单粗暴的处理方式,放在文章内部。因为其实现在也主要是文章会用到这两个东西,完全可以把它们作为文章这个领域模型的一个值对象。其实我现在线上这个版本也是这么做的:

网络异常,图片无法展示
|


当然了,从实现上来讲,可能底层的存储会和现在的实现有些不一样,因为之前就是在信息分类这块没做好,所以产生了“文集”、“主题”、“标签”等等一堆概念。但其实只需要标签就可以了,基于标签来做分类、搜索、推荐的功能。所以标签可能在DB层面是一个单独的表,但如何实现不是在这个阶段需要思考的,现在我们只需要关心领域模型就行了。


密码这个东西,现在看起来不是非要不可,而且想设计一个对多种资源加密的密码管理,开发成本较大,尤其是前端。所以我直接去掉了密码这个领域模型,也砍掉了与之相关的需求。以后如果有文章加密的需求,也可以作为文章的一个值对象来处理。

所谓DDD,最后一个D就是Design,没有绝对正确和标准的领域模型,只有合适的领域模型。设计总会有所权衡和取舍。在设计过程中,也会发现有些需求可能不合理或者实现成本比较大,可以做适当的调整。


没有再细分子域和限界上下文。因为目前来看,个人网站的功能还是比较简单的,没有必要再细分。真要细分的话,我觉得可以分为“文章域”、“网站管理域”和评论域,其中文章、订阅等属于文章域的,页面配置、公告、版本介绍等属于网站管理域。评论单独拿了出来,因为它是一个通用的子域,它既可以用于文章评论,也可以用于网站留言板。


为什么评论不拆开,一个是“文章评论”,一个是“留言板”?因为我认为两者其实是一个东西,都是用户在网站上留下一段话,也可以回复别人。只是评论的主体不同而已,一个是文章,一个是网站本身。所以我认为它是一个独立的领域模型。

整个网站的需求拆分、模型设计都已经搞好了,下一步需要做的就是开始搭建开发环境啦,敬请期待!

目录
相关文章
|
监控 网络协议 Go
应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
109971 229
|
4月前
|
存储 机器学习/深度学习 边缘计算
OSS生命周期管理自动化:7天冷归档+30天低频访问的合规存储策略(结合企业级数据分级场景)
在数据爆炸增长背景下,企业面临存储成本攀升与合规要求升级的双重挑战。本文以金融与医疗行业实践为例,深入解析如何通过OSS自动化生命周期管理实现数据分级存储优化。内容涵盖数据热力模型分析、存储类型成本对比、状态机驱动的自动降级策略、合规性保障机制及机器学习动态预测方案,最终达成存储成本下降64.3%、合规审计通过率提升至98.7%的实战效果。适合关注云存储架构优化、数据治理与合规管控的技术决策者参考。
163 0
|
11月前
|
存储 Java 数据处理
探索安卓开发:从新手到专家的旅程
【10月更文挑战第42天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从安卓开发的基础知识开始,逐步深入到高级概念。我们将通过实际的代码示例和清晰的解释,帮助你理解安卓开发的核心原理,并学会如何构建你自己的应用程序。无论你是刚刚入门的新手,还是已经有一定经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起开始吧!
|
人工智能 测试技术 计算机视觉
7B最强长视频模型! LongVA视频理解超千帧,霸榜多个榜单
【8月更文挑战第1天】新模型LongVA实现7B级最强长视频理解!通过长上下文转移技术,LongVA能够处理超千帧视频,显著提升长视频理解精度。不同于传统模型依赖视觉重采样导致的信息损失,LongVA扩展语言主干上下文长度,无需额外视频训练即可理解大量视觉标记。在V-NIAH等基准上取得SOTA成绩,处理2000帧以上视频无额外复杂度增加。但实时应用及非视频任务仍面临挑战。[论文](https://arxiv.org/abs/2406.16852)
326 4
|
存储 人工智能 物联网
云计算与分布式系统架构:未来技术驱动的创新之路
在当今数字化时代,云计算和分布式系统架构成为了企业和个人实现高效、可靠和灵活计算的关键。本文将探讨云计算与分布式系统架构的基本概念和原理,并介绍其在现代技术领域中的应用和未来发展趋势。
342 1
|
Python
解决Pycharm安装后无法导入库的问题
解决Pycharm导入库问题:进入Settings,选择Project的`Python Interpreter`,点击Add Interpreter。删除`.venv`文件夹内容,然后关闭并重启Pycharm以初始化新环境,现在可以正常导入库了。
550 1
解决Pycharm安装后无法导入库的问题
|
前端开发 Python
五. Django项目之电商购物商城 -- 短信验证码生成
五. Django项目之电商购物商城 -- 短信验证码生成
|
搜索推荐 语音技术 UED
网页可访问性设计的重要性、无障碍阅读的原则以及实现网页无障碍的具体方法
【6月更文挑战第14天】在数字化时代,网页可访问性设计至关重要,旨在确保所有用户,包括残障群体,能平等使用互联网。良好的可访问性符合法律法规要求,提升社会责任感,优化用户体验。无障碍阅读原则包括文本可读性、图像可感知性、音频视频可访问性和交互性设计。实现无障碍的方法有遵循WCAG标准、使用语义化HTML、支持辅助技术、进行无障碍测试及提供帮助。这不仅是技术挑战,更是设计者的社会责任。
320 0
|
设计模式 XML JSON
Pipeline设计模式,确定不了解一下?
Pipeline设计模式是我在来新公司才接触到的,也是在项目上广泛使用的一种东西。觉得挺有意思的,所以写一篇文章向大家介绍一下,希望大家喜欢。
2701 5
|
算法 C语言
【C语言】——函数--递归及习题练习
【C语言】——函数--递归及习题练习