返回顶部
首页 > 资讯 > 前端开发 > JavaScript >DDD中怎么避免过度设计
  • 795
分享到

DDD中怎么避免过度设计

2024-04-02 19:04:59 795人浏览 八月长安
摘要

这篇文章主要介绍了DDD中怎么避免过度设计,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。DDD即领域驱动设计,是一种建模方法论,强调通过分析

这篇文章主要介绍了DDD中怎么避免过度设计,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

DDD即领域驱动设计,是一种建模方法论,强调通过分析建模、再设计实现,而不是数据库表驱动。

DDD解决的是核心复杂业务设计,特别强调的是“核心”与”复杂”,DDD只适用于业务系统。

DDD简化业务系统的实现,让业务逻辑高度内聚,聚合之间通过聚合根ID引用与领域事件松耦合,正是高内聚低耦合能让项目代码随着业务需求的不断迭代保持整洁。

通过四层架构设计/六边形架构设计实现与基础设施、框架的解偶。

DDD也解决了微服务的拆分问题。

DDD解决的是业务问题,通过事件风暴识别领域事件、识别限界上下文、识别问题子域、聚合,再对聚合建模。并非解决数据查询问题、数据分析问题。

前面我们了解了如何通过CQRS解决读写分离问题,然而……

在实战DDD过程中我们总会遇到一些即不适合领域建模也不能简单通过CQRS解决的问题,如为前端提供住址、性别等选项的接口如何实现、用户标签功能如何设计、评价功能如何设计……

对于这些看似简单的问题,我们要考虑的是如何避免过度设计,保持架构的简洁以及扩展。

为前端提供选项有非常多的场景。有些选项是个枚举类型,如性别、订单类型;有些选项需要支持增加或删除,如商品分类,虽然实体需要通过ID引用它,但却又不适合作为实体存在。

无论是枚举类型的选项,还是通过ID引用却又不适合作为实体存在的选项,都应该作为值对象。可以直接在应用层读写存储/缓存中间件,如Mysql、es、Redis

下文中会出现的领域(业务)名词:达人:网红、红人,有粉丝群体的个人、有一定影响力的个人;OTO探店:线上报名线下探店,线上推广(主要服务美食点,为商家推广线下店铺);

我们项目中有需要实现为达人打标签的需求,在接到这个需求时,我们首先做的就是分析标签能产生什么样的价值,再通过事件风暴看是否能分析出领域事件。

结合项目业务分析,达人标签在我们项目中发挥的价值其实就是用于兴趣匹配推送,在OTO探店业务场景下,兴趣匹配可以理解为根据达人喜好的口味给达人推送相关店铺的订单。

分析到这里我们就清楚了标签功能要做的就是数据分析还有算法推荐,除此之外,标签没有任何领域事件(行为、业务动作),标签不存在领域上下文,所以不应该过度设计。

另外,为达人打标签/达人自己打标签,那么标签就是达人的值对象,与达人的性别、年龄、住址等属性都是达人的值对象。达人可以添加标签或者删除标签。

所以最终我们实现的标签功能就只是在达人的聚合根上添加一个标签值对象。给达人聚合根添加修改标签的方法。

另外我们需要为前端提供标签选项,支持管理员添加或删除标签,与实现普通选项一样,我们单独在达人聚合下提供一个应用层的LableService,直接操作数据库增/删标签。

标签表的存在只是提供标签选项,达人给自己打标签只能从系统提供的标签中选择,标签相当于只是选项。因此达人的标签值对象并非存标签的id,而是直接存标签的名称。

当标签选项删除时我们不应该为所有打了该标签的用户默认删除他的标签,这实际是不允许的,就像我们不能随便改用户的性别、住址一样。

只有在达人更新标签时不提供已经删除的选项,让达人自己选择新的标签更新,更新后旧的标签全部被替换也就达到删除的目的。

除选项、标签外,我们要做的还有一个评价功能。

根据事件风暴我们分析出以下领域事件: a、达人完成任务后商家可评价达人(每个任务只允许评价一次) b、商家评价达人后更新达人的得分(如内容质量得分)  "商家评价达人"涉及到任务、达人、商家三个维度,达人可以查看商家给自己的评价,商家也可以查看自己给哪些达人写了评价,并且都能查看任务关联的评价。

显然,无论是把评价功能放到任务上下文还是达人上下文、商家上下文,都不合理。因此我们为评价划分出评价上下文,识别出评价问题子域。  商家评价达人作为评价上下文的一个聚合,后期可能还会实现支持达人评价店铺,而达人评价店铺又是一个评价上下文的聚合,评价上下文存在多个聚合。

我们在实战DDD过程中,在实现前端选项、标签功能、评价功能过程中也做了详细的分析再设计,目的都是避免过度设计。

感谢你能够认真阅读完这篇文章,希望小编分享的“DDD中怎么避免过度设计”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网JavaScript频道,更多相关知识等着你来学习!

--结束END--

本文标题: DDD中怎么避免过度设计

本文链接: https://lsjlt.com/news/80264.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • DDD中怎么避免过度设计
    这篇文章主要介绍了DDD中怎么避免过度设计,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。DDD即领域驱动设计,是一种建模方法论,强调通过分析...
    99+
    2024-04-02
  • ASP 编程中如何避免算法复杂度过高?
    ASP(Active Server Pages)是一种动态网页技术,它使用VBScript或JScript等编程语言进行编写。在ASP编程中,算法复杂度过高可能会导致网页响应时间过长,从而影响用户体验。为了避免这种情况的发生,我们需要采取一...
    99+
    2023-08-21
    编程算法 linux 文件
  • Java中怎么避免OOM
    Java中怎么避免OOM,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.了解 强引用、软引用、弱引用、虚引用的概念在Java中,虽然不需要程序员手动去管理对象...
    99+
    2023-06-17
  • 怎么在Java中避免死锁
    这篇文章给大家介绍怎么在Java中避免死锁,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维...
    99+
    2023-06-14
  • Java中怎么避免反模式
    本篇文章给大家分享的是有关Java中怎么避免反模式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用接口,如:12345package one;public interface...
    99+
    2023-06-17
  • Java中怎么避免sql注入
    小编给大家分享一下Java中怎么避免sql注入,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言sql注入是web开发中最常见的一种安全漏洞。可以用它来从数据库获...
    99+
    2023-06-26
  • Nginx中怎么避免传统缓存
    今天就跟大家聊聊有关Nginx中怎么避免传统缓存,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、传统缓存之一(404)这个办法是把Nginx缓存的...
    99+
    2024-04-02
  • 怎么在python中避免KeyError异常
    这篇文章将为大家详细讲解有关怎么在python中避免KeyError异常,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python可以做什么Python是一种编程语言,内置了许多有效的工具,...
    99+
    2023-06-14
  • Python中怎么避免滥用try...except
    这篇文章主要讲解了“Python中怎么避免滥用try...except”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中怎么避免滥用try...except”吧!有不少人在写 Py...
    99+
    2023-06-16
  • java中怎么避免程序死锁
    本篇文章为大家展示了java中怎么避免程序死锁,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  死锁发生的条件  互斥,共享资源只能被一个线程占用  占有且等待,线程 t1 已经取得共享资源 s1,...
    99+
    2023-06-02
  • golang中什么是死锁?怎么避免?
    一、什么是死锁?在并发编程中,当两个或多个进程(线程)相互等待对方的资源释放时,就会产生死锁(Deadlock)。简单来说,就是每个进程都占用了一部分资源,同时需要等待对方释放资源,以完成自己的任务,但是对方也一样,这时候就会造成死循环式的...
    99+
    2023-05-14
  • 如何避免 C++ 泛型编程中过度使用运行时类型信息?
    在 c++++ 泛型编程中,避免过度使用运行时类型信息 (rtti) 的替代方案包括:模板特化:用于对有限数量的类型执行特定操作。类型别名:用于访问类型特定的信息。元编程:用于在编译时计...
    99+
    2024-04-25
    泛型编程 运行时类型信息 c++
  • 怎么在javascript中避免回调地狱
    这期内容当中小编将会给大家带来有关怎么在javascript中避免回调地狱,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、async.series()当要运行一个函数然后在所有函数成功执行后需要获取结果...
    99+
    2023-06-15
  • 怎么在HTML中避免字符转义
    本篇内容主要讲解“怎么在HTML中避免字符转义”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在HTML中避免字符转义”吧!在 HTML 中,有些字符如尖括号、引号、和符号等需要用实体编码来表...
    99+
    2023-07-06
  • Java项目中怎么避免循环依赖
    本篇文章给大家分享的是有关Java项目中怎么避免循环依赖,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。举个例子:图中我们的API 库导入了一些库,但这些库同时依赖了库X的不同版...
    99+
    2023-06-15
  • Shell脚本中怎么避免重复执行
    这篇文章给大家介绍Shell脚本中怎么避免重复执行,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。代码如下:# 检查通过sh命令执行的shell脚本是不是还在执行当中,避免重复执行. # 把这段代码放在需要保证唯一性的程...
    99+
    2023-06-09
  • 跳槽必备之你设计索引的原则是什么?怎么避免索引失效?
    目录主键索引为频繁查询的字段建立索引避免为"大字段"建立索引选择区分度大的列作为索引尽量为ORDER BY 和 GROUP BY 后面的字段建立索引不要在条件中使用函数不要建立太多的...
    99+
    2024-04-02
  • Redis数据库中怎么避免网络延迟
    Redis数据库中怎么避免网络延迟,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  如何避免Redis数据库网络延迟问题  当你需要使用R...
    99+
    2024-04-02
  • 高并发下怎么优化能避免服务器压力过大
    这期内容当中小编将会给大家带来有关高并发下怎么优化能避免服务器压力过大,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。<p _hover-ignore="1"  whit...
    99+
    2023-06-04
  • 接口设计中的陷阱:如何规避 ASP 开发过程中的常见错误?
    接口设计是 ASP 开发中非常重要的一环,它直接决定了系统的可靠性和可维护性。然而在接口设计过程中,常常会遇到各种陷阱,这些陷阱可能会导致系统出现各种问题。本文将介绍 ASP 开发过程中常见的接口设计陷阱,并提供相应的解决方案,希望能帮助开...
    99+
    2023-06-17
    leetcode 重定向 接口
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作