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

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

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

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

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

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

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

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

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

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

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

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

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

【译文】领域模型的五个特征相关推荐

  1. 《如何搭建小微企业风控模型》第五节 特征工程(上)

    <如何搭建小微企业风控模型>第五节 特征工程(上) 第一章 小微企业数据风控技术的框架 小微企业数据贷发展情况概述 搭建小微企业风控模型所需知识 风控模型概览 第二章 强相关变量:企业经营 ...

  2. 【JavaSe】面向对象篇(五) 三大特征之二继承

    JavaSe·面向对象篇(五) 三大特征之二继承 1. 面向对象三大特质之继承 1.1 由来 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那 ...

  3. 五个特征,七个习惯,小农意识

    人不成熟的五个特征 1.立即要回报 2.不自律 3.经常被情绪左右 4.不愿学习,自以为是,没有归零心态 5.做事不靠信念,靠人言 成功人士的七个习惯 1.积极主动 2.以终为始 3.要事第一 4.双 ...

  4. 特征提取与检测(五) : LBP特征

    一.LBP简介 LBP(Local Binary Pattern)算法是一种描述图像特征像素点与各个像素点之间的灰度关系的局部特征的非参数算法,同时也是一张高效的纹理描述算法,纹理是物体表面的自然特性 ...

  5. 三维计算机视觉(五)--特征描述子

    PPF 机器人视觉中有一项重要人物就是从场景中提取物体的位置,姿态.图像处理算法借助Deep Learning 的东风已经在图像的物体标记领域耍的飞起了.而从三维场景中提取物体还有待研究.目前已有的思 ...

  6. 机器学习入门研究(五)-特征工程之特征提取

    目录 为什么要用特征工程 特征提取(Feature Extraction) 1.目的 2.对应的工具 3.三种方法 4.对应的sklearn的API (1)字典特征提取 (2)文本特征提取 总结 特征 ...

  7. 计算机病毒的八个特征,计算机病毒的五个特征- 1:.单项选择题(8)

    单项选择题 A.人不可避免地会导致贫穷 B.人一旦起了争夺,就说明有欲望没有达到 C.只有当人的追求没有止境时,才会导致贫穷 D.如果没有发生混乱,说明追求并不是没有止境的 76:一间房屋的长.宽.高 ...

  8. html工作界面抽象吗,WEB界面设计五种特征-网页设计,HTML/CSS

    1.比喻 如同windows用桌面.文件夹.垃圾筒来比喻计算机的*作,web的设计也是如此.善于利用明确.抽象或概念化的比喻icon来表达各不相同的栏目,能够增加观众对栏目的兴趣,但是要紧记不适合原意 ...

  9. 优秀的软件开发经理,都具有这五个特征

    全文共1789字,预计学习时长3分钟 图片来源:pexels.com/@rawpixel 软件开发经理的工作不是提供一件产品或某项功能,也不是实现任何指标或增加收入.经理的主要工作是确保他所带领的工程 ...

最新文章

  1. LiveData + ViewModel + Room (Google 官文)+Demo
  2. java servlet_Java Servlet的前100个问题
  3. Service Mesh(服务网格)
  4. php过程函数,php流程控制和函数
  5. 相分离相关文章阅读Intrinsically disordered linkers determine the interplay between phase separation and gelat
  6. selenium三个等待时间
  7. 第一部分 1.2 定义OC的类和创建OC的对象
  8. 互联网+正在颠覆行车记录仪市场
  9. 安装运行okvis odometry
  10. STM32串口下载程序
  11. 高效办公之Windows高效技巧提高你的工作效率
  12. MacBook上Wi-Fi抓包权限
  13. homeassistant搭建_智能家居 篇二:Home Assistant简易智能家居环境搭建
  14. Nginx 405 not allowed
  15. 什么相片可以两张弄成一张_美图秀秀怎么把两张图片合成一张?美图秀秀两张图片融合方法汇总_图形图像_软件教程_脚本之家...
  16. 22考研清华深研院电子与通信,985信号与系统400+高分经验分享
  17. ChemDraw如何画立体图?
  18. 上传文件到服务器指令,上传文件到远程服务器的命令
  19. Java Web程序设计第12章课后第2题
  20. 热部署与定时任务冲突问题解决方案

热门文章

  1. 固态硬盘可靠性_您可以通过使用较少的总容量来提高硬盘的可靠性吗?
  2. MySQL设置从库只读模式
  3. oracle导出数据库中表出现导出报错(EXP-00003)未找到段 (0,0) 的存储定义
  4. Mac Ubuntu ----端口被占用
  5. VC++ 6.0 C8051F340 USB PC侧通信 Demo
  6. android笔记之在WebView中显示ProgressBar的两种方法
  7. yum安装最新的 LNMP
  8. petshop4.0 详解之五(PetShop之业务逻辑层设计)[转]
  9. C#实现网页加载后将页面截取成长图片 | Playwright版
  10. 使用 dotnet-monitor 在 Kubernetes 中收集 .NET metrics