BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

使用函数式编程语言F#编写DDD与CQRS应用

| 作者 Jan Stenberg 关注 33 他的粉丝 ,译者 邵思华 关注 3 他的粉丝 发布于 2014年4月3日. 估计阅读时间: 2 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

在近期的一次演讲中,Lev Gorodinski提出了一种观点,他认为对于领域驱动设计(DDD)来说,如果使用F#这种函数式编程语言来代替C#这种面向对象编程语言进行开发的话,能够带来两个额外的好处,这种方式不仅专注于行为,而且能够更多地使用声明方式来表现代码。讲座中使用的示例用到了包括事件溯源(Event Sourcing)和命令查询责任分离(CQRS)方面的技术。

Lev在过去的一年中在F#上投入了大量的精力,而在近8个月以来则完全专注于F#。在讲座中,Lev所介绍的示例是基于Greg Young最早提出CQRS时所编写的例子,这个修改后的示例展现了F#的实现方式与C#版本的不同,既体现出其优势也展现出难点所在。而如果转而使用传统的面向对象方式实现该示例的话会有一些问题,例如代码会显示非常冗长,并且领域实体会对事件溯源的实现方式产生依赖。

而使用F#的方式,使用更少的代码反而能改进实现。去掉了许多样板代码之后,使整个代码实现不会显得那么冗长,而且能够更加显式地处理任务。F#代码更能够体现方法的实质,而且也没有隐藏的副作用。对Lev来说,使用F#进行DDD开发的方式能够带来一些额外的好处,因为他能够专注于代码的行为,而不是将精力耗费在实现所必须的一些基础结构代码上,这同时也意味着抛弃了增删查改(CRUD)这种思考方式。F#方式使得代码表现得更为声明式,与其说是编写代码实现方法,不如说是定义了方法的规格,而由F#代码实现了这个规格。

Lev也提到,这些额外的好处本质上是来源于DDD的天然优势,在Eric EvansVaughn Vernon的两本关于DDD的书中分别都有列举。在Lev尝试F#实现的过程中,他所遇到的一大挑战是对这种新编范式的应用。在开始阶段,他总是忍不住用C#的风格去实现F#代码。直到一段时间之后才克服了这种问题,并真正转换到函数式编程的风格。并且F#本身既支持函数式编程也支持面向对象编程,这使Lev有时也难以决断到底应该使用哪种风格。

查看英文原文:DDD and CQRS Using the Functional Language F#

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

zan by 张章 鸥翔鱼游

好文章。总是支持一下的

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT