【译文】领域模型的五个特征

我在这篇博客文章中,我试图给领域模型下一个非常合适的定义,我发现我的这些定义都不太妥当,不过,我们还是可以先来看一下wiki百科对领域驱动模型下的定义:

问题解决和软件工程中的领域模型可以被认为是感兴趣的领域(通常称为问题领域)的概念模型,其描述了各种实体,它们的属性和关系,以及控制完整性的约束。包含该问题域的模型元素。

听起来很重要?换句话说,领域模型是每个应用程序的重要组成部分,它是现实世界概念的表示。但是,如何区分好的领域模型和坏的模型呢?由于了解领域模型,你也需要了解问题域,因此对于这个问题,并没有明确的答案。在这篇文章中,我打算通过介绍领域模型的五个特征来简化这个问题的理解难度。

我认为,一个好的领域模型,他应具备以下基本特征:

正确的对问题域进行建模。一个好的领域模型不一定是来自现实世界的精确副本,但它必须以所需的准确度对问题域进行建模。这意味着它必须仅包含与解决给定问题相关的信息。必须从域模型中排除不必要的信息,即使它存在于现实世界中。不过,仅仅包含正确的实体依然不够,这些实体之间关系也得正确。在你使用这个标准判断一个领域模型之前,你应当了解从问题域中发现的知识,这绝非易事。 

使用正确的统一语言。由于领域模型是问题域的表示,因此必须正确地命名其元素、必须确保无论是客户或承包商都使用同一种语言(统一语言)。统一语言很重要,因为它可以最大限度地减少误解的可能性,而这些额外的误解可能降低向客户提供产品的质量。验证分析的域模型是否满足此要求非常简单,如果一个领域模型中的元素命名准确恰当,那么客户显然能无碍的理解。

领域应拥有和表达与当前问题域相关的完整信息。一个好的领域模型控制对其信息所做的更改。因此它应该提供操作其内容的方法,并禁止对其控制下的信息进行所有其他更改。仅为领域模型的信息提供单个访问点有两个主要优点:它减少了重复代码并保护了领域模型的完整性。因此,遵循此个方法将导致职责清晰且更不容易出错的代码,这应该是每个软件工程师的目标。此外,如果您需要仅基于领域模型且没有其他依赖关系的信息,则应将提供此信息的方法放在域模型中。这种方法遵循关注点分离原则,它将通过阐明软件的体系结构来提高代码质量。遵循这些方法也将帮助您避免称为贫血领域模型的反模式。

提供内置的日志记录支持。领域模型应该提供获取实体的内容序列化成字符串的方法,并通过把对象的内容写入到日志的做法通常很有用。采用这种方法你不必手动构造日志的结构,只需将有问题的对象输出到日志文件中,就足以让你了解到相关的操作过程。

良好的单元测试覆盖。设计一个好的领域模型,单元测试覆盖率显然是必须考虑的因素(至少对于专业开发者而言)。但我已经了解到假设可能是危险的。这就是为什么我想写下关于单元测试领域模型的几句话的原因。虽然我知道精确的指导方针可能很危险,但我认为在这种情况下,可以为任何领域模型的单元测试提供准确的指导。您必须简单地测试每个方法(不包括getter或setter方法)。

通过本文作者描述了一个设计优良的领域模型的五个特征。通过这篇博文可以帮助读者辨识领域模型的优劣性,并为设计领域驱动模型提供一些提示。

PS:如果从头开始设计领域模型,往往会认为需要一个领域驱动设计的操作说明,因此作者推荐大家阅读 为Eric Evans的《Domain-Driven Design》,这是一本有关领域驱动设计的史诗级巨作,值得每一位开发者阅读。 

原文地址:https://www.cnblogs.com/xiyuanMore/p/10836592.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg

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

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

相关文章

使用ASP.NET Core 实现Docker的HealthCheck指令

写在前面HealthCheck 不仅是对应用程序内运行情况、数据流通情况进行检查, 还包括应用程序对外部服务或依赖资源的健康检查。健康检查通常是以暴露应用程序的HTTP端点的形式 实施,可用于配置健康探测的的场景有 :容器或负载均衡器 探测应用状…

VS Code 中有哪些好用的 Azure 插件?

在之前的文章中,我们提到了 Amazon、Google、IBM、Red Hat、Salesforce、Pivotal 等大厂都在 VS Code 中有提供相应的开发工具:亚马逊上了 VS Code 的船,还有哪些大厂也上了船?微软必定更是把 VS Code 作为其最重要的开发者平台了…

邀请 | 关于微软容器服务,你需要知道的二三事

容器是近年来特别火的话题,那么,什么是容器?为什么我们需要容器服务?微软容器服务特点是什么?今天我们用一种特殊的方式为大家介绍这三大话题。什么是容器这个部分,我们用一个故事进行开场。很久以前&#…

UWP 推荐 | 限时免费的RSS阅读器《RSS 追踪》登录 Windows 10

前不久,本公号作者 Bravo Yeung 写了一篇不错的关于 RSS 的文章 .Net开发者必知的技术类RSS订阅指南。RSS 现在用的人很少了,而且就算是我,也不过是在一周前才开始正视 RSS 。只因为接触到了一个很好很强大的社区 RSS Hub ,当时看…

常见跨域解决方案以及Ocelot 跨域配置

常见跨域解决方案以及Ocelot 跨域配置Intro我们在使用前后端分离的模式进行开发的时候,如果前端项目和api项目不是一个域名下往往会有跨域问题。今天来介绍一下我们在Ocelot网关配置的跨域。什么是跨域跨域:浏览器对于javascript的同源策略的限制,例如a.cn下面的js不…

解读大内老A的《.NET Core框架本质》

老A说的一句话让我很受启发,想要深入了解框架,你要把精力聚焦在架构设计的层面来思考问题。而透彻了解底层原理,最好的笨办法就是根据原理对框架核心进行重建或者说再造。看起来没有捷径,也是最快的捷径。相信很多读者已经看过老A…

Mono和.NET Core 从比翼双飞到合体

.NET 开源之路就是 Mono和.NET Core 从比翼双飞到合体:2001年12月-2002年2月。一个新的平台诞生了。与惠普、英特尔和其他公司一起, 创建了 ECMA-335 标准, 该标准定义了支持多种编程语言的公共语言基础结构,C# 和 Visual Basic. Net。 F # 于2007年晚些…

Skywalking部署常见问题以及注意事项

Skywalking部署常见问题以及注意事项IntroSkyWalking 创建与2015年,提供分布式追踪功能。从5.x开始,项目进化为一个完成功能的Application Performance Management系统。他被用于追踪、监控和诊断分布式系统,特别是使用微服务架构&#xff0c…

GitHub推出包管理服务,npm与Nuget全支持

GitHub 今天推出了一项名为 GitHub Package Registry 的新产品,它提供了软件包管理服务,开发者通过它可发布公共或私有软件包。官方介绍,GitHub Package Registry 完全集成在 GitHub 中,因此和 repo 一样,用户可以使用…

发布dotNetCore程序到Kubernetes

上一篇《Mac中搭建Kubernetes》介绍了怎样在Mac中搭建单节点的Kubernetes,本文将编写一个dotNetCore的示例程序,并发布到Kubernetes中。环境基本步骤创建dotnetCore示例项目;本地搭建私有registry,或者使用DockerHub,本…

[Cake] 2. dotnet 全局工具 cake

在上篇博客[Cake] 1. CI中的Cake中介绍了如何在CI中利用Cake来保持与CI/CD环境的解耦。当时dotnet 2.1还未正式发布,dotnet 还没有工具的支持,使得安装cake非常麻烦。不过随着 dotnet tool 的加入,这一问题得到了很好的解决。目前安装cake&am…

官博翻译 | .NET Core 即 .NET 的未来

点击上方蓝字关注“汪宇杰博客”文 / Scott Hunter译 / 汪宇杰我们在2014年11月推出了.NET Core 1.0。.NET Core 的目标是借鉴我们过去12年构建、发布和服务.NET Framework的经验去构建更好的产品。这些改进如:并行安装(您可以安装新版本,而…

微软发布ML.NET 1.0,可一键添加机器学习模型

今天,我们很高兴宣布发布 ML.NET 1.0。ML.NET 是一个免费的、跨平台的开源机器学习框架,旨在将机器学习(ML)的强大功能引入.NET 应用程序。ML.NET GitHub:https://github.com/dotnet/machinelearning入门 http://dot.…

目前下载VS2017你可能会遇到这个坑

可能现在大伙都已经开始使用VS2019进行开发了。VS2019的下载使用也都很简单。由于工作需要,今天要在笔记本上安装VS2017,结果发现,VS2017的下载变得不是那么容易了,官方的下载方式也隐藏的很深,来来回回折腾了好一会才下载下来&am…

代码整洁之道(Clean Code)- 读书笔记

Sorry, 许久未更新文章了,主要因为刚刚换了一家新公司,忙于组建团队(建设、招聘、流程、框架等)与熟悉公司业务,还有领导给的其他工作等等,实在是没有时间更新了。最近在和团队分享Bob大叔的《Clean Code》…

微软Build 2019大会.NET课程视频汇总

点击上方蓝字关注“汪宇杰博客”5月6日至8日,微软在西雅图召开了Build 2019开发者大会。我们关注的.NET领域也迎来了许多激动人心的改进。本文汇总了Build 2019大会上关于.NET的已经公开的视频,欢迎大家观看学习!// 注意:以下视频…

黑科技抢先尝 | Windows全新终端初体验(附代码Build全过程)

微软在几天前的build大会上展示了Windows Terminal的威力,由于官宣要在6月中旬才上Microsoft store,还有一个多月要等呢。好在代码已公布在 github, 于是决定自己 build 后体验一番。遇到不少坑,大概整理一下流程,分享给大家。如果…

aelf帮助C#工程师10分钟零门槛搭建DAPP私有链开发环境

aelf是一个可扩展的去中心化云计算区块链平台,支持高性能合约并行执行、原生多链数据交互、存储使用高性能分布式数据库。aelf整个系统可以在windows、osx及linux运行,团队在osx环境下开发,基于.net core DAPP开发1.安装.net core及protobufh…

Build 2019 上微软的开源动作有点不一样

微软今年举办的 Build 开发者大会可谓是抢足风头,大会第一天就放了不少大招:宣布新的命令行终端 Windows Terminal、Windows 10 的 Linux 子系统 WSL 2 将运行真正的 Linux 内核、跳过 .NET 4 宣布 .NET 5 的计划、宣布 Web 版本的 VS Code (Visual Stud…

P1437 [HNOI2004]敲砖块

P1437 [HNOI2004]敲砖块 题意: 在一个凹槽中放置了 n 层砖块、最上面的一层有 n 块砖,从上到下每层依次减少一块砖。每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示: 14 15 4 3 2333 33 76 22 …