OOP,OOD,DDD设计理念

OOP(面向对象编程)、OOD(面向对象设计)和 DDD(领域驱动设计)是软件工程中三个密切相关但层次不同的设计理念。它们共同目标是提升软件的可维护性、可扩展性和可理解性,但在关注点和抽象层次上有所不同。下面分别介绍三者的核心思想,并说明它们之间的关系。


一、OOP(Object-Oriented Programming,面向对象编程)

定位:编程范式(Implementation Level)
核心思想:将现实世界中的事物抽象为“对象”,通过封装、继承、多态等机制组织代码。

四大基本原则:

  1. 封装(Encapsulation)

    • 隐藏对象内部状态,仅通过公共接口与外界交互。
    • 提高安全性与模块化。
  2. 继承(Inheritance)

    • 子类复用父类的属性和方法,支持代码复用。
    • 注意:过度继承可能导致紧耦合,现代设计更倾向于组合优于继承。
  3. 多态(Polymorphism)

    • 同一接口在不同对象中有不同实现。
    • 支持运行时动态绑定,增强灵活性。
  4. 抽象(Abstraction)

    • 忽略细节,聚焦本质特征。
    • 通过抽象类或接口定义通用行为。

✅ OOP 关注的是“如何写代码”,是具体实现层面的技术。


二、OOD(Object-Oriented Design,面向对象设计)

定位:设计方法(Design Level)
核心思想:在编码前,对系统进行高层次的对象建模,确定类、接口、关系等结构。

核心内容:

  • 识别对象与职责:哪些实体需要建模?每个类负责什么?
  • 建立类之间的关系:关联、聚合、组合、依赖、继承等。
  • 应用设计原则与模式
    • SOLID 原则
      • S: 单一职责原则(SRP)
      • O: 开闭原则(OCP)
      • L: 里氏替换原则(LSP)
      • I: 接口隔离原则(ISP)
      • D: 依赖倒置原则(DIP)
    • 常用设计模式:工厂、策略、观察者、装饰器等。

✅ OOD 关注的是“如何设计系统结构”,是 OOP 的前置设计阶段。


三、DDD(Domain-Driven Design,领域驱动设计)

定位:软件开发方法论(Strategic & Tactical Design)
提出者:Eric Evans(2003 年《Domain-Driven Design》)
核心思想:以业务领域为核心,通过与领域专家紧密协作,构建反映真实业务逻辑的软件模型。

战略设计(Strategic Design):

  • 限界上下文(Bounded Context):明确模型适用的边界,避免概念混淆。
  • 通用语言(Ubiquitous Language):开发团队与业务方使用统一术语。
  • 子域划分(Core, Supporting, Generic Subdomains):聚焦核心业务。

战术设计(Tactical Design):

  • 实体(Entity):具有唯一标识的对象(如订单 ID)。
  • 值对象(Value Object):无标识,通过属性值判断相等性(如地址)。
  • 聚合(Aggregate):一组相关对象的集合,由聚合根统一管理一致性。
  • 领域服务(Domain Service):处理跨多个实体/值对象的业务逻辑。
  • 仓储(Repository):提供聚合的持久化与查询接口。
  • 工厂(Factory):封装复杂对象的创建逻辑。
  • 领域事件(Domain Event):表示领域中发生的重要业务动作。

✅ DDD 关注的是“如何理解和建模业务”,强调业务语义与软件结构的一致性。


四、三者关系总结

维度OOPOODDDD
层次实现层设计层方法论/架构层
目标写出结构良好的代码设计合理的对象模型构建贴合业务的系统
关注点类、对象、方法类关系、设计原则领域模型、上下文、通用语言
依赖关系OOD 指导 OOPDDD 指导 OOD——

🔗关系链
DDD → 指导 → OOD → 指导 → OOP

例如:
在 DDD 中识别出一个“订单”聚合;
在 OOD 中设计Order聚合根、OrderItem值对象、IOrderRepository接口;
在 OOP 中用 Java/C# 等语言实现这些类,并应用封装、多态等特性。


五、实际建议

  • 小型项目:OOP + 基础 OOD(如 SOLID)即可。
  • 中大型业务系统(如电商、金融):强烈推荐引入 DDD,避免“贫血模型”和业务逻辑散落。
  • DDD 不是银弹:适用于复杂业务领域,对于 CRUD 或技术密集型系统可能过度设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1145721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

几何建模引擎 ACIS/Parasolid/CGM/OpenCascade

1.几何建模引擎 ACIS/Parasolid/CGM/OpenCascade 这几款几何建模引擎(Geometric Modeling Kernels)是现代工业软件(CAD/CAM/CAE)的“心脏”。它们负责处理最底层的几何计算、拓扑关系和布尔运算。 为了帮你理清这四款引擎的区别…

nodejs_vue3半亩菜园线上预售系统的设计与实现

目录摘要项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作摘要 随着互联网技术的快速发展,线上预售系统成为农产品销售的重要渠道。"半亩菜园线上预售系统"基于Node.js与Vue3技术栈开…

Python机器人健康预警系统

目录Python机器人健康预警系统摘要项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作Python机器人健康预警系统摘要 Python机器人健康预警系统是一种基于数据分析和机器学习的智能监测工具,旨在实…

Python机器人健康预警系统

目录Python机器人健康预警系统摘要项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作Python机器人健康预警系统摘要 Python机器人健康预警系统是一种基于数据分析和机器学习的智能监测工具,旨在实…

PyFlink Configuration 一次讲透怎么配、配哪些、怎么“调得快且稳”

1. 配置入口:DataStream vs Table API 1.1 DataStream API:用 Configuration 创建 env from pyflink.common import Configuration from pyflink.datastream import StreamExecutionEnvironmentconfig Configuration() config.set_integer("python…

【车辆路径规划】人工势场法APF与快速探索随机树算法RRT全向车辆路径规划【含Matlab源码 14913期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…

构建中医古籍智能系统:知识图谱+多智能体+LLMs实战指南

中医古籍知识传承面临文献碎片化、术语异构等挑战。传统知识图谱构建技术依赖人工,应用有限。本文提出将多智能体系统与知识图谱融合,结合大型语言模型的语义理解能力,实现三元组提取技术突破。通过检索增强生成技术实现多源知识动态整合&…

LLM - 从定制化 Agent 到 Universal Agent + Skills Library:下一代智能体架构实践

文章目录引言:为什么「再多造几个 Agent」不再是答案一、概念澄清:什么是 Universal Agent 和 Skills Library1. Universal Agent:从「专科医生」到「总住院医师」2. Agent Skills:把「经验 流程」变成可调用模块3. Skills Libra…

大模型微调四大技术:Prefix Tuning、Prompt Tuning、LoRA、QLoRA,一篇搞定!建议收藏!

文章详细介绍了四种参数高效的大模型微调技术:Prefix Tuning通过添加可训练前缀提升特定任务性能;Prompt Tuning作为简化版仅在输入层加入少量可训练参数;LoRA利用低秩分解大幅减少训练参数量;QLoRA结合4-bit量化和双重量化技术&a…

存储设备协议全解析

eMMC、DRAM、MicroSD 和 Flash 是常见的存储设备或技术,但它们在功能、协议、接口和用途上有显著区别。下面分别介绍这些存储装置所涉及的主要协议和标准:1. eMMC(Embedded MultiMediaCard)类型:嵌入式非易失性存储&am…

PyFlink Debugging从“看不到日志”到“精准定位 UDF 性能瓶颈”

1. 日志体系:Client Side vs Server Side(别搞错位置) 1.1 Client Side Logging(提交端日志) 适用:UDF 之外 的代码,比如建表、拼 SQL、打印 schema、构建 pipeline 的过程。 from pyflink.tabl…

情感计算在AI Agent中的应用:增强LLM的EQ

情感计算在AI Agent中的应用:增强LLM的EQ 关键词:情感计算、AI Agent、大语言模型(LLM)、情商增强、自然语言处理 摘要:本文深入探讨了情感计算在AI Agent中的应用,旨在增强大语言模型(LLM)的情商(EQ)。首先介绍了情感计算和AI Agent的背景知识,包括目的、预期读者、…

03-01:MQ常见问题梳理

1.1:MQ如何保证消息不丢失 1.1.1:哪些环节会有丢消息的可能? 其中,1(发送消息的时候),2(消息到达服务端持久化的时候),4(消费组消费消息的时候&am…

移动设备传感器通信协议全解析

在移动设备、嵌入式系统或物联网(IoT)设备中,Touch(触摸)、Camera(摄像头)等传感器通常通过标准化或厂商特定的协议与主处理器通信。这些协议可以分为硬件接口协议和软件抽象层协议两类。以下是…

PyFlink 两件事说清楚就够了

1) FLINK_HOME:决定“用哪套 Flink 发行版”来编译/提交 它影响什么 PyFlink 在提交前需要用 Flink 发行版做一些编译/打包相关的工作(比如拉起相关脚本、加载依赖、构建 JobGraph 等)。PyFlink 的安装包里自带了一套 Flink distribution&a…

Python包管理器 uv是否替代conda?

python的包管理器uv可以替代conda吗?搞数据和算法的把conda当宝贝,其他的场景能替代。Python的包管理器有很多,pip是原配,uv是后起之秀,conda则主打数据科学。uv替代pip似乎只是时间问题了,它能做pip所有能做的事&…

【车辆路径规划】基于matlab人工势场法APF与快速探索随机树算法RRT全向车辆路径规划【含Matlab源码 14913期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…

2026必备!8个AI论文工具,继续教育学生轻松搞定论文格式规范!

2026必备!8个AI论文工具,继续教育学生轻松搞定论文格式规范! AI 工具助力论文写作,轻松应对格式与内容挑战 在继续教育领域,论文写作一直是学生和科研人员面临的重要任务。随着人工智能技术的不断发展,AI 工…

PyFlink FAQ 高频踩坑速查版

1)如何准备 Python 虚拟环境(venv.zip) 场景 你本地跑 PyFlink 没问题,但一提交到远程集群就报: ModuleNotFoundErrorPython 版本不对pandas/pyarrow/apache-beam 版本不匹配 根因几乎都是:集群机器上 Pyth…

Pandas比MySQL快?

有人问,处理百万级数据,Python列表、Pandas、Mysql哪个更快?Pands是Python中非常流行的数据处理库,拥有大量用户,所以拿它和Mysql对比也是情理之中。实测来看,MySQL > Pandas > Python列表&#xff0…