牛津大学“领域驱动设计”课程

2024-03-14 07:28

本文主要是介绍牛津大学“领域驱动设计”课程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

领域驱动设计(“DDD”)是一种专注于系统领域而不是技术的软件设计方法。重点是构建共享的心理模型并以尽可能简单的方式在代码中表示该领域模型。数据库存储、框架等技术细节被认为是设计的次要方面。该模块将重点关注 DDD 和一般设计以及相关主题,例如文档和软件架构的某些方面。本课程使用基本的函数式编程概念来表达领域和设计:类型作为文档,函数(以及函数的组合)用于实现。在适当的时候也可以引入面向对象的等价物和面向对象的设计模式。

频率:
该课程每年举办一次。

课程日期:
2024 年 10 月 21 日    牛津大学计算机科学系——在系内举行    剩余 09 个名额。

目标
完成课程后,学员将:

  • 了解领域驱动设计的原理以及它与面向对象设计、数据库驱动设计等的区别。
  • 了解何时以及为何使用 DDD 而不是其他方法。
  • 了解如何采访领域专家以了解领域中的关键概念和活动,重点强调沟通和开发共享的心理模型。
  • 了解如何使用代数类型和函数记录这些概念和活动
  • 了解如何使用类型来捕获尽可能多的领域细节,以及如何“使非法状态无法表示”并减少单元测试的需要。
  • 了解适用于函数和类型的组合原则,以及如何从较小的函数组合活动(建模为函数)。
  • 了解如何应用 DDD 方法来处理错误。
  • 了解如何将非纯元素集成到设计中(I/O、数据库等)并管理应用程序中的状态。
  • 了解 DDD 方法来划分设计(“有界上下文”)以及设计如何与软件架构相关。

内容
了解域:
软件开发过程;需求、分析、设计;沟通与反馈;用例、故事、工作流程

域建模:
代数类型和函数类型;继承、接口;请求/响应与输入/输出

细化域:
使用类型来捕获约束;可选类型和总和类型;身份、实体、价值对象;重构

建模状态及时间:
状态机;不变量;命令和事件;事件溯源;时间相互作用

针对错误进行设计:
总功能;“诚实”的函数签名;域错误;建模和组合误差生成函数;验证

纯度、I/O 和测试:
以数据库为中心与以领域为中心的架构;有状态与无状态设计;确定性和单元测试;将 IO 移至边缘;错误恢复、交易、补偿;不可变数据、账本

领域驱动的设计和数据库:
持久化到数据库或文档存储;命令查询分离;在数据库中存储状态机;快照存储、时态数据库、事件源;报告

分区和构建域驱动设计:
有界上下文;上下文映射,“反向康威策略”;公共领域事件与内部事件;序列化域对象;部署(模块化单体、SOA/微服务、无服务器)

总结:
审查所有技术;构建完整的应用程序,包括需求收集、设计、实现、错误处理和数据库存储

评估标准
该任务旨在按照重要性递减的顺序确定:

  • 您了解领域驱动设计的关键原则吗?您能解释一下 DDD 与其他软件设计方法有何不同吗?
  • 您是否演示过如何使用非技术领域专家和其他利益相关者可以理解的代数类型来表示领域?
  • 您是否了解如何避免使用原语以及如何表示简单的约束类型、可选数据等?您能否展示如何改进设计以消除某些类型的错误以及防御性编程的需要?
  • 您了解状态管理和数据库的 DDD 方法吗?
  • 您了解如何划分设计并围绕此规划架构吗?

要求
该课程将需要基本的编程技能,例如使用编辑器、使用 git 等。不需要 DDD 或函数式编程的先验知识 - 所有概念将根据需要在课程中介绍。它无意于涵盖任何深度的函数式编程;它独立于 FPR,但与之互补。

本课程使用的编程语言是 F#,因为它支持面向对象和函数式编程风格。无需具备 F# 经验。

https://www.jdon.com/72931.html

这篇关于牛津大学“领域驱动设计”课程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807644

相关文章

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系