腾讯亿级用户规模自研业务的上云实践解读,立即报名 了解详情
写点什么

用函数式语言做领域驱动设计

  • 2014-03-26
  • 本文字数:711 字

    阅读完需:约 2 分钟

领域驱动设计 (DDD) 中使用函数式语言 ,在跟业务专家探讨时,真正的代码经常简单得足以取代各种UML 图, Scott Wlaschin 在最近的函数式伦敦群组集会上讲到了一个用 F#做业务建模和函数式编程的真实案例。

Scott,一位.NET 架构师,同时也是掌握函数式编程的作者,他很欣赏函数式编程,但面向对象的开发人员可能会觉得函数式编程很恐怖,接受不了仿函数、应用型、单子之类所有这些奇怪的专业术语,不过 Scott 宣传它们确实只是陌生的术语。对于 Scott 来说,面向对象编程的那些概念也很恐怖,比如多态、泛型、继承、协变等。他认为函数式编程更容易,因为它的概念更少,并且特别强调在他演示的例子中没用到这些概念中的任何一个。

按照 Scott 的经验,很多开发人员都觉得函数式编程擅于解决数学和科学领域中的问题,但对于现实世界中的普通应用来说太复杂了,但他认为 F#真的很适合做那些无聊的业务类应用程序 (BLOBA) 的开发;它非常精炼,有很多规避套路化代码的便利之处,还有一个确保程序正确性的类型系统。

在领域驱动设计中比较 F#和 C#时,可以看看值对象和实体两种代码的例子,Scott 说 F#的代码通常会简单得多,有时候简单的都可以用来跟领域专家讨论领域模型了,甚至可以直接评审代码,都不用 UML 图或者其他模型。

在介绍 F#的类型系统时,Scott 展示了如何把类型和用来做类型检查的注解变成领域建模工具,并用来呈现设计。因为编译器会做类型检查,所以类型系统可以被看作是编译时的单元测试。

一个优秀的静态类型系统就像一个编译时单元测试。

Scott 在结论中宣称 F#是函数优先开发中低风险的、安全的选择,他的主要依据是 F#有微软在后面撑腰。

原文英文链接: Domain-Driven Design Using a Functional Language

2014-03-26 04:061961
用户头像

发布了 45 篇内容, 共 23.6 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

数据治理平台化的通用框架设计

Taylor

LabVIEW仪表盘识别(实战篇—6)

不脱发的程序猿

机器视觉 图像处理 LabVIEW 仪表盘识别

Centos7下Nginx编译安装与脚本安装的记录

edd

架构实战营5期模块1作业

lovles

「架构实战营」

第一次作业

Mr小公熊

天津银行周传凯:从 0 到 1,我的分布式数据库落地经验谈

OceanBase 数据库

分布式 OceanBase 开源 OceanBase 社区版 客户实践

☕【Java深层系列】「并发编程系列」深入分析和研究MappedByteBuffer的实现原理和开发指南

洛神灬殇

Java 文件I/O MappedByteBuffer FileChannel 1月日更

架构图 - 微信 & 学生管理系统

Ntropy

架构实战营

模块一作业--

Leo

「架构实战营」

微信业务架构 & 学生管理系统架构

凌波微步

「架构实战营」

架构训练营作业1

Richard

架构实战营

LabVIEW实现PCB电路板元器件匹配定位(实战篇—7)

不脱发的程序猿

计算机视觉 图像处理 LabVIEW PCB电路板元器件匹配定位

实现一个任务调度系统,看这篇文章就够了

勇哥java实战分享

Elastic-job XXL-JOB 任务调度 自主研发

微信架构简析和学生系统初步方案

Bear

「架构实战营」

什么时候该减少质量投入?

QualityFocus

质量管理 软件测试 测试思维

[架构实战营]-架构实训一

邹玉麒

「架构实战营」

微信朋友圈架构设计

刘洋

#架构实战营

JavaScript 之 Proxy

编程三昧

JavaScript 前端 Proxy 1月月更

我的架构学习之始

浪飞

模板

Anthony

微信业务架构图

Geek_36cc7c

小程序电商业务微服务拆分及基础设施选型

swallowluo

架构实战营 #架构实战营 「架构实战营」

Apache APISIX 2.12.0 版本发布,新功能更适配新一年!

Apache APISIX 中文社区

开源 后端

架构设计小试牛刀

Fingal

架构实战营

学生管理系统架构设计方案

Geek_36cc7c

「架构实战营」模块一作业

hxb

「架构实战营」

音视频技术如何为元宇宙提供全真稳的全新体验之漫话腾讯云音视频 | 社区征文

liuzhen007

音视频 1月月更 新春征文

模块六作业

novoer

「架构实战营」

架构训练营模块一作业

苍狼

微信业务架构图 & 学生管理系统设计

tom

用函数式语言做领域驱动设计_函数式编程_Jan Stenberg_InfoQ精选文章