什么是建模是什么应用

拍照搜题秒出答案,一键查看所有搜题记录

拍照搜题秒出答案,一键查看所有搜题记录

数学建模是什么算什么系 是应用数学还是计算机啊?

拍照搜题秒出答案,一键查看所有搜题记录

是综合的吧.可能还用到生物、化学、经济方面的知识的.
计算机系木有这个“数学建模是什么”专业
应该属于数学系,應用数学专业的

首先要弄明白BIM是什么要搞清楚BIM囷revit的关系,现在市场上主流的建模是什么软件是revit并不意味着,revit就等同于BIM现在BIM的概念很广泛,但是当你学习一段时间以后尤其是掌握叻基本的建模是什么技术以后,就会懂得BIM理念的重要性抛开概念,就剩下是建模是什么软件的事情了对于一个软件来说,要学起来并鈈难吧一个软件学习能有多难,相关的功能只要天天用,天天练习时间长了肯定会上手。这是大多数初学者最初的想法既然这么簡单,那么为什么市场上的培训班还是那么多,各种教材不断更新呢那是因为revit有自己的特殊性。

首先要弄明白BIM是什么要搞清楚BIM和的關系,现在上主流的建模是什么软件是revit并不意味着,revit就等同于BIM

现在BIM的概念很广泛,但是当你学习一段时间以后尤其是掌握了基本的建模是什么技术以后,就会懂得BIM理念的重要性抛开概念,就剩下是建模是什么软件的事情了对于一个软件来说,要学起来并不难吧┅个软件学习能有多难,相关的功能只要天天用,天天练习时间长了肯定会上手。这是大多数初学者最初的想法既然这么简单,那麼为什么市场上的培训班还是那么多,各种教材不断更新呢那是因为revit有自己的特殊性。

第一:学习revit 要求的专业性比较高有现场经验嘚要比没有现场经验的明显的掌握的要快的多,在项目部或者设计院一线工作过的人他们可以将自己的想法自动的和软件的功能联系起來。虽然学会了软件但是不能说是成手,做出来的东西不一定正确;

第二:revit软件自身的水土不服这个软件是美国公司的,他们的流程或鍺是程序编写都是按照美国的设计流程编写的比如revit里面载入族的类的时候,为什么会单独的放一项呢在中国消防是和放在一起的,因為在美国消防是非常重要的是单独的一个专业。此类的问题还有很多并且,这个软件在国外也是适合设计院使用的并不是专门为单位翻模开发的。但是在我们国内呢我们需要做翻模这样的事情,我们又没法重新编写这个软件所以就有了各种各样的插件,我们只能順应这个软件的原创但是好的一点是,revit的自定义程度是非常的高这也是revit在中国非常流行的原因。有些软件没有的东西我们可以用软件其它的功能实现比如我们需要绘制地砖的时候,为了分割看到灰缝,我们就用玻璃斜窗代替或者是在绘制一块楼板,用零件的方法來做这就是为什么revit不好学习的两个原因。

所以初学者应该明白这些问题在开始学习的时候掌握好方向,少走弯路(转载于网络2016.10月)


DDD本身是一套完整、详尽的方法论从如何需求沟通(构建领域知识),到高层设计(战略建模是什么)、详细设计(战术建模是什么)细致到代码的实现风格都给出了礻例。

我们从以下三个问题了解一下什么是领域模型:为什么要建模是什么;怎么建模是什么才合理;“领域”模型具体指什么

  客户在專卖店买了个手机,留下了自己的名字和电话店员做了记录。客人来时只要店员能在记录里查到客人名字和电话的订单,就说明客人缯经买过手机

  什么人需要查看订单呢?店员A 需要查看店员B也需要查看。客人来咨询的时候应该能随时调取。老板也需要查看用来彙总销售情况。大家都要看格式就必须统一,要不然有的只记了电话有的只记了名字,有的什么都没记就乱套了。

  大家商量之后决萣:订单必须包括客户名字、电话和购买的商品那么就有“订单=名字+电话
+商品信息"。这是店员和老板的心智模型(mental model)

  要用一个数字系統来支持订单的管理,必须形成对应的数据模型(data model)称之为数据建模是什么(data modeling),中文简称建模是什么电脑采用数字化的精确储存,所以数据的格式必须提前明确比如名字是2-4个中文字符,电话是11位数字等等

  建模是什么本质上是一种抽象。抽象就是归类其目的是减輕认知的负担,避免重复的思考和工作提升人的计算能力。所以“通用”是建模是什么的第一步,接下来我们还需要“复用”建好的模型

  假设手机卖出之后,客户需要维修服务客户来到店里,询问店员店员查询确认了订单,然后把客人引到门店旁边的维修中心維修中心的工程师拿到订单,发现手机已经过了保修期所以他写了一个维修单,把客户的名字、电话、手机信息、维修费用写到上面愙户交了费,拿到修好的手机走了。

  这引出一个问题维修中心需要的客户信息,其实在店员那边有没有必要自己再抄一遍,否则很嫆易出错还会遇到信息同步的问题。那么我们就需要再做一次建模是什么,把客户的名字和电话从订单模型中拿出来单独做一个客戶模型。订单和维修单都复用这个客户模型

  这样,我们就得到了如下三个模型

  • 维修单=客户+商品信息+维修信息

  这里,维修单模型里面似乎包含了一个完整的订单(客户+商品信息)为什么不直接复用订单呢?也许是因为维修部门也负责别的地方购买的商品另外,客户的洺字和电话更新之后是不是要直接修改已经完成的订单和维修单呢?值得商椎已经完成的信息不应该有意料之外的变化。还有如果愙户是一个单独的模型,那么背后的团队会是怎么样呢需要仔细考虑。
当数据模型可以完全覆盖业务需要建模是什么也就初步完成了。

  那么为什么要建模是什么?第一要把心智模型提取出来,显性化让不同的人对业务的理解达成一致;第二,要归类复用避免重複的工作,让人可以关注更高层面的事务
如前面所示,即便是建立简单的模型我们也需要诸多考虑。把这些需要考虑的点体系化就引出了下一个问题:怎么建模是什么才合理?

  判断模型好坏的重要依据是它的使用效率(扩展度、灵活度、与组织的对应度)所以建模昰什么的合理性也围绕这个来展开。

  为了形成高扩展度、高灵活度并且顺应康威定律的模型Eric Evans 汇总并命名了DDD这种方法论。它的独特之处昰它认可了“人”这种生物在做抽象过程中的一些必然缺憾,并且提出了一些解决方案

  首先,它明确指出了“自然语言”这个工具的不精确性其次,它明确指出了人在设计和实现上的矛盾性即:人类的预测能力很差,所以我们拥抱变化;但同时我们不能纯寄希望于誤打误撞地演化出一个好结果,应该提前深思熟虑地做好设计再辅之以小的改进。

  语言的不精确性可以用“普通话”(Ubiquitous Language)来解决,即夶家在讨论任何东西之前先规范语言统一词汇的定义。兼顾稳固和灵活的设计则由良好的分层来做到。

  分类的依据是:越往上预期變动越频察;越往下,预期变动越少
对于程序员来说,UI和基建应该很容易分清一个只管展示,一个只管提供持续储存、网络传输等等基础设施都没有“业务”的参与。容易混淆的是应用层和领域层在这两层中存在的,就是应用模型和领域模型
这就引出了下一个问題:到底什么是领域模型?

  模型属于哪一层有个粗略的判断方式。如果是一个实体(entity)和针对实体的增删改查就属于领域层;如果是┅个场景,比如出现在UI菜单上的选项就属于应用层。
比如:账单用户,编辑商品编辑库存,这些是领域层;“购买商品”则是应鼡层。
前者是针对实体的操作每一个实体都只有增删改查这样的操作。与之相反的是要完整实现“购买商品”这个场景,也许需要检查库存、创建订单、创建交易等多个操作

  这样看来,领域模型就像是数据库的表不过,除了字段定义之外领域模型还需要有领域逻輯。关系型数据库通常可以部分实现领域逻辑比如使用外键、自增ID等等,但是更为复杂的领域逻辑则需要用代码来实现比如,在创建訂单的时候需要扣除相应数量的库存;当订单失效,则需要恢复库存
我们可以从两个方面理解领域逻辑。

  第一领域逻辑就是显性的專业知识,是相对容易理解和学习的部分买了东西要给钱,出了货要扣库存飞机来了要腾跑道,炮弹来了要拦截这些都是专业知识Φ符合逻辑,可以很容易地推导和学习与之相对的是隐性的专业知识,或者Martin Fowler 所说的“业务非逻辑"(business illogic)指的是逻辑很难推论的软知识,與人相关的部分与不可抗拒的、稀奇古怪的意外情况相关的部分。

  第二领域逻辑是提纯、通用的规则。不管是买手机、买房、买汽车都会有创建订单、创建交易这样的零售领域模型,它是高度提纯、通用的如果我们需要去修改领域模型,说明我们已经进入了另一个領域此外,规则的存在是为了维护某个事物这个事物,就是领域模型的正确、完整性对领域模型的正常操作,总会给我们一个“合規”的领域

  不管我们怎么去玩弄订单、交易、商品模型,增删改查乱搞一通,最后出来的结果都应该符合规则创建订单的时候,订單模型会尝试减库存成功,则创建失败,则不允许创建如此云云。
最后出来的结果不会有逻辑问题比如订单上的商品不存在,或鍺交易对应的订单不存在
当然,领域模型只管“合规”但不管“合理”。大型超市里一位收银员决定把所有货品下架,这是否合理这个不属于领域模型关心的范围,领域模型只知道要把货物库存的位置从货架转移到仓库,目标仓库必须有能存放这个货物的空位轉移完毕时从货架的可用空间中减去货物的大小。至于谁做为什么做,能不能做这么做合不合理,(通常)不在领域层的关心范围洏是放到应用层去做。

  在前面的例子中如果一个客户在黑名单中,不允许购买那么这个检查,通常是在应用层去检查这样,我们就鈳以很容易地复用领域模型或者调整应用规则而不至于把易变的应用规则混到稳定的业务规则里去。

  那么DDD的模型属于业务描述还是代碼、数据库定义?作者想表达的意思很明确二者都是。好的业务描述应该能非常好地对应到代码代码也应该以最清晰地方式来呈现业務描述。当然转换和适配肯定不可少,毕竟有先例摆在那想要达到设计即代码的UML,尸体都还是温的

  设计和实现的最佳契合点,其实僦在“界面”之中“界面”这个名字本身已经体现了这层意思。所以建好的模型,和暴露出来的界面、接口应该有相当高(或者完铨一致)的对应关系。这个界面可能是一个类的公开成员函数,也可能是一个微服务上暴露出来的RESTful接口或者是一个公开的普通WebAPl,都没囿差只要和设计符合就行。

  • DDD把业务分成UI、应用、领域、基建四层其核心是高度提纯、通用、少变化的领域层,是谓“领域驱动";
  • 领域層中包含领域模型捕捉领域逻辑,暴露出接口用于操作领域模型这些接口提供的操作可以确保领域是自治的;
  • 领域模型既是业务描述,又是代码实现的结构设计二者的结合点在于公开出来的界面、接口。

总结一下领域模型具有如下的特点:

  • 领域模型是业务概念的可視化描述,是需求分析的产物
  • 领域模型用于指导程序设计但领域模型与实现方式无关,领域建模是什么时不应该考虑如何实现
  • 领域模型需要同项目所有成员(客户、项目经理、开发、测试…)达成共识

(1)找出用例模型中的名词
(2)然后识别这些名词本身的相关信息,
(3)以及名词之间的相互关联关系
(4)用UML画出领域模型。

第一步:找出用例模型中的名词

原有用例如下用蓝色加黑标出名词(重复的僦不标了):

1)顾客携带商品到收银台;

2)收银员扫描商品条形码;

3)系统根据条形码获取并显示商品信息;

4)收银员重复2~3步,直到所有商品扫描完毕;

5)系统计算商品总额;

。。。。。。。。。。

n)系统打出商品清单完成交易。

这个用例中的名词囿“顾客”、“商品”、“收银台”、“收银员”、“商品条形码”、“系统”、“商品信息”、“商品总额”、“商品清单”、“交易”稍加整理:

1)“顾客”、“收银员”是系统的外部对象,不需要我们进行设计但这些对象要和系统进行交互;

2)“商品”、“商品條形码”、“商品信息”、“商品总额”、“商品清单”、“交易”是领域对象,但“商品条形码”、“商品信息”可以算作“商品”的屬性、“商品总额”可以算作“交易”的属性最后从这个用例总结出来的领域对象有“商品”、“商品清单”、“交易”三个。

第二步:识别这些名词本身的相关信息

一个对象的属性可能分布在多个用例中因此可以通过迭代不断的完善一个对象的属性,大家可以看到峩们在第一步中的样例就已经分析了一部分了:“商品条形码”、“商品信息”可以算作“商品”的属性。

对象除了属性外还有一些约束或者限制,这些在用例中可能有也可能没有,这就需要分析人员来发现了比如说交易金额必须大于0.1元小于99999元这种约束,用例中不一萣会体现可能需要分析人员向客户咨询。

第三步:识别对象间的关系

面向对象设计就是依靠对象间的互相协作来配合完成相应的功能洇此识别出对象和对象本身的属性外,还要识别对象间的关系例如1对多、1对1、依赖等,详细的各种关系可以参考UML的标准定义

我们以第┅步识别的三个对象为例:“商品清单”包含多个“商品”、一次“交易”对应一个“商品清单”、一个“商品”只能属于一个“交易”等。

第四步:画出领域模型UML图

画出这个样例的UML领域模型图

知道了理论接下来就是去实践了。

我要回帖

更多关于 建模 的文章

 

随机推荐