首页 > 其他分享 >领域驱动设计-软件核心复杂性应对之道 11-13

领域驱动设计-软件核心复杂性应对之道 11-13

时间:2023-06-17 19:11:58浏览次数:47  
标签:11 分析 13 重构 模型 复杂性 模式 设计

11. 分析模式的应用

马丁 分析模式:表示业务建模中的常见构造

分析模式的最大作用是借鉴其他项目的经验,把那些项目中所做的广泛的设计方向讨论和实现结果的经验与当前的模型结合起来。

记账:钱不会无中生有,也不会无故消失。它只能从一个账户迁移到另一个账户。

当你可以幸运地使用一种分析模式时,它一般并不会直接满足你的需求。但它为你的研究提供了有价值的指导,而且提供了明确抽象的词汇。它还可以指导我们的实现,从而省去很多麻烦。

我们应该把所有分析模式的知识融入到知识消化和重构的过程中,从而形成更深刻的理解,并促进开发。当我们应用一种分析模式时,所得到的结果通常与该模式的文献中记载的形式非常相像,只是因具体情况不同而略有差异。但有时也完全看不出这个结果与分析模式本身有关,然而这个结果仍然是受该模式思想的启发而得到的。

但有一个误区是应该避免的。当使用一个众所周知的分析模式中的术语时,一定要注意,不管其表面形式的变化有多大,都不要改变它所表示的基本概念。这样做有两个原因,一是模式中蕴含的基本概念将帮助我们避免问题,二是在通用语言中使用被广泛理解或至少是被明确解释的术语可以增强通用语言。如果在模型的自然演变过程中模型的定义也发生改变,那么就要修改模型名称了。

很多对象模型都有文献资料可查,其中有些对象模型专门用于某个行业的某种应用,而有些则是通用的模型。大部分对象模型都有助于开阔思路,但只有为数不多的一些模型精辟地阐述了选择这些模式的原理和使用的结果,而这些才是分析模式中最有用的部分。这些精化后的分析模式大部分都很有价值,有了它们,可以免去一次次的重复开发工作。尽管我们不大可能归纳出一个包罗万象的分析模式类目,但针对具体行业的类目还是能够开发出来的。而且在一些跨越多个应用的领域中适用的模式可以被广泛共享。

这种对已组织好的知识的重复利用完全不同于通过框架或组件进行的代码重用,但是二者唯一的共同点是它们都提供了一种新思路的萌芽,而这种新思路先前可能并不十分明晰。一个模型,甚至一个通用框架,都是一个完整的整体,而分析则相当于一个工具包,它被应用于模型的一些部分。分析模式专注于一些最关键和最艰难的决策,并指明了各种替代和选择。它们提前预测了一些后期结果,而如果单靠我们自己去发现这些结果,可能会付出高昂的代价。

12. 将设计模式应用于模型

策略模式

组合模式

13. 通过重构得到更深层的理解

1)以领域为本

2)用一种不同的方式看待事物

3)始终坚持与领域专家对话

探索团队

  • 自主决定
  • 注意范围和休息
  • 练习使用通用语言

借鉴先前的经验

分析模式

针对开发人员的设计

软件不仅仅是为用户提供的,也是为开发人员提供的

柔性设计

重构的时机

持续重构

  • 设计没有表达出团队对领域的最新理解
  • 一些重要的概念被隐藏在设计中了
  • 发现了一个能令某个重要的设计部分变得更灵活的机会

危机就是机遇

进化论,进化模型,长期的缓慢变化或稳定变化会被相对来说很短的、爆发性的快读变化所打断。然后事物会进入一个新的平衡。软件开发与物种进化之间的不同点是前者具有明确的目的方向性(虽然在某些项目上可能并不明显),尽管如此它仍遵循这种进化规律。

标签:11,分析,13,重构,模型,复杂性,模式,设计
From: https://www.cnblogs.com/lhxBlogs/p/17488077.html

相关文章

  • Java官方笔记11包
    PackagesDefinition:Apackageisagroupingofrelatedtypesprovidingaccessprotectionandnamespacemanagement.Notethattypesreferstoclasses,interfaces,enumerations,andannotationtypes.Enumerationsandannotationtypesarespecialkindsof......
  • macOS 13 设置开机启动
    标题虽说是开机启动,但其实是用户登录时加载,本质上是一个意思。1创建用户LaunchAgents目录LaunchAgents目录默认不存,需要手动创建:mkdir~/Library/LaunchAgents2创建.plist文件macOS的登录时加载的文件格式是plist,所以如果你想创建开机启动,则必需创建这个文件。2.1......
  • P4305 [JLOI2011] 不重复数字
    思路:新建一个数组或者哈希表,检查新输入的元素是否在里面,如果在就pass,如果不在就作为新元素存进去,最后输出即可数组实现:60分#include<bits/stdc++.h>usingnamespacestd;intmain(){intnum;cin>>num;for(num;num>=1;num--){intn,x;cin>>n;......
  • pybind11基本用法
    1、头文件和命名空间约定#include<pybind11/pybind11.h>namespacepy=pybind11;2、函数绑定`PYBIND11_MODULE`会创建一个函数,它在Python中使用`import`语句时被调用。宏的第一个参数是模块名(example),不使用引号包住;第二个参数是类型为`py::module_`的变量(m),它是创建绑定的......
  • 13-第四篇-控制单元的功能
    13-第四篇-控制单元的功能一、微操作命令分析微操作:指令解释阶段由控制单元发出的一些指令,这些指令完成的动作跟整条指令完成的功能相比要小的多完成一条指令分4个周期取指周期间址周期指令周期中断周期1.取指周期PC->MAR->地址线1->RM(MAR)->MDRMDR->IROP(IR......
  • nvm详细安装步骤避坑指南以及使用(以win11系统为例)
    版权声明:本文为CSDN博主「Lucky@czj」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/czj_com/article/details/127103504  使用背景:nvm是一个管理nodejs版本的工具。在实际的开发中,有些项目的开发依赖需要低版本的nodej......
  • HIMA F7131 981713102 电源单元
    HIMAF7131981713102电源单元HIMAF7131981713102电源单元 引言在一个桥接的局域网里,为了增强可靠性,必然要建立一个冗余的路径,网段会用冗余的网桥连接。但是,在一个透明桥桥接的网络里,存在冗余的路径就能建立一个桥回路,桥回路对于一个局域网是致命的。它会带来如下问......
  • POJ2117 Electricity 题解 tarjan点双连通分量 割点
    题目链接:http://poj.org/problem?id=2117题目大意:给定一个由\(n\)个点\(m\)解题思路:tarjan,判断\(u\)的子节点有几个\(v\)满足\(low[v]\gedfn[u]\)就是答案,但是同时如果\(u\)不是这个dfs树的根节点,个数还要加\(1\)。示例程序1(C++11,POJ不支持):#include<bits/stdc++.h>......
  • 【Azure 环境】使用az login登录遇见OSError: [WinError -2146893813] : '' 错误
    azlogin|Decryptionfailed:[WinError-2146893813]Keynotvaidforuseinspecifiedstate|msal_extensions.persistence:DPAPIerrorlikelycausedbyfilecontentnotpreviouslyencrypted.Appdevelopershouldmigratebycallingsave(......
  • 【雕爷学编程】Arduino动手做(113)---5110液晶屏模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是......