《软件方法》强化自测题-分析(12)

DDD领域驱动设计批评文集

做强化自测题获得“软件方法建模师”称号

《软件方法》各章合集

按照业务建模、需求、分析、设计工作流考察,答案不直接给出,可访问自测链接或扫二维码自测,做到全对才能知道答案。

1 [单选]

AI降临,软件开发中的搬砖工作首先被横扫。对此,《软件方法》多年前已经说过原因。

以下文字均摘自2018年发布的《软件方法》下册电子书第8章,请问,哪一个最适合用来解释搬砖工作被横扫的现象。

 A) 更为复杂的是,同一个核心域可能要映射到多个互相竞争的非核心域,即所谓"多平台"。例如Sports Interactive的《Football Manager(足球经理) 2017》游戏,就有PC版、Mac版、Linux版、iPad版、Android版。

 B) 为组织提供软件的软件组织也越来越专注于一个领域,甚至逐渐成为组织里的一个部门。将来,独立的软件组织也许将不复存在,或者说,所有组织都是软件组织。

 C) 如果不先用层次状态机的图形对领域逻辑显式建模,再根据模型通过工具或人工映射到实现,而是直接下手实现,领域逻辑靠临时脑补,得到的代码必定破绽百出。

 D) 核心域知识和非核心域知识是独立的,域和域之间的映射规律,与域中的个体不直接相关。如果将图8-11中的Person改成Dog,City改成Cat,映射的套路没有变化。如果我们调整了域之间的映射套路,映射结果也会按照我们的调整有规律地变化,与域中的个体依然无关。

2 [单选]

最近,上海交大樊同学奖金事件引起关注。

用UML类图表示樊同学事件相关概念如下,假设同一团队可以同时获得多个奖项,包括同一等级,例如,F同学和K同学组成的团队可以获得两个二等奖,总奖金2*5000=10000元。

图片

如果给“团队”加一个约束:团队所得奖金总和等于团队人员所分奖金的总和,用OCL如何表达?

 A) 获奖s->collect(x | x.数量 * x.奖项.奖金)->sum() = 成员s.所分奖金->sum()

 B) 获奖s.奖项.奖金->sum() = 成员s.所分奖金->sum()

 C) 获奖s.数量->sum() * self.获奖s.奖项.奖金->sum() = 成员s.所分奖金->sum()

 D) 获奖s->collect(x | x.数量 * x.奖项.奖金)->sum() = 成员s.所分奖金->asSet()->sum()

3 [单选]

DDD圈子曾经写文章展示了一个等式的“不变式”(该文用词为“固定规则)

图片

受到了批评,批评文章在这里:续1-续3 你的医书是假的!(https://mp.weixin.qq.com/s/DtlKuP2uxaPaKaQC6DKiYw。该批评文章指出,DDD圈子某篇文章展示的“不变式”(或称“固定规则”)存在多处建模错误。具体来说,批评主要围绕以下几点展开:位置错误——不变式应附着在合适的类上,而非随意放置;表示错误——其表达方式不符合OCL(对象约束语言)或契约式设计的规范;逻辑矛盾——该“不变式”试图表达的规则(如订单总价等于各订单项金额之和)本身是计算逻辑,而非真正的不变式(Invariant)。真正的不变式应描述对象在其生命周期内必须始终保持为真的条件,例如“订单总金额必须大于零”。而将“总价 = Σ(订单项.单价 × 数量)”作为不变式,实际上混淆了派生属性(Derived Attribute)的计算规则与不变式。因此,批评文章认为,除非系统存在一个“从总价出发做假账”的特殊需求(即选项C所描述的场景),否则这样的“不变式”在规范的领域建模中是不合理的。这引导读者思考不变式的本质,并区分领域规则与实现细节。

抛开图中所谓“不变式”的位置错误、表示错误等不谈,请问,什么情况下这样内容的“不变式”是合理的?

 A) 拉一群年轻的资深敏捷专家和DDD专家,边喝酒边头脑风暴足足三小时,投票决定:这样内容的“不变式”是合理的。

 B) 使用领域驱动设计的革命性创造,令在某个上下文中,这样的不变式是合理的。

 C) 系统有一个从总价出发做假账的功能。

 D) 系统需要从订单项的属性值来计算订单的属性值。

4 [单选]

最近,上海交大樊同学奖金事件引起关注。

用UML类图表示樊同学事件相关概念如下。

图片

假设同一团队可以同时获得多个奖项,包括同一等级,例如,F同学和K同学组成的团队可以获得两个二等奖,总奖金2*5000=10000元。

奖金严格按团队成员的等级(例如 婆罗门>刹帝利>吠舍>首陀罗)来分配。目前的分配规则是:如果团队成员等级相同,则平分奖金,如果团队成员存在等级差别,则最高等级成员先平分90%的奖金,剩下的奖金和成员继续按同样规则处理。

如果90%这个数字可以灵活设置,如果强制它一定要成为以下某个类的属性,那么相对比较合适的是:

 A) 奖项

 B) 团队

 C) 人员

 D) 等级

5 [单选]

关于Martin Fowler的《Analysis Patterns》,以下说法正确的是:

 A) 作者根据自己极其丰富的项目经验,精选了一批会在很多个领域的系统中反复出现的分析模式,以便读者可以复用在自己的项目中。

 B) 书中革命性地提出了用Party作为人和组织的超类。

 C) 书中的模式来自Folwer参与过的项目,模式的选择有一定的随机性。

 D) 书中的“岗位(Post)”模式为后来的RBAC(基于角色的访问控制)模式奠定了基础。

6 [单选]

近日,长沙市一公职人员彭某某在德峰小区霸占车位引起关注。

如果为“产权车位”建立状态机,以下不适合作为状态的是:

 A) 空闲

 B) 被他人车辆占用

 C) 存在纠纷

 D) 联系占位车主发挪车通知

7 [单选]

最近,杭州"黄总请你去包厢"登上热搜。

图片

假设餐馆的规矩是:

包厢的客人有权让服务员去把卡座和散座的客人请到包厢,卡座和散座的客人无权让服务员去把包厢的客人请到卡座和散座;

卡座的客人有权让服务员去把散座的客人请到卡座,散座的客人无权让服务员去把卡座的客人请到散座。

也就是说,这里存在着等级问题。

如果用类图来建模上面的规矩,把“等级”建模成一个整数类型的属性。请问,“等级”最适合作为以下哪个类的属性?

 A) 包厢

 B) 包厢、卡座和散座

 C) 场所(包厢、卡座和散座的共同超类)

 D) 场所类型

8 [单选]

最近,“中国人不需要蛋白质”的视频引起关注。

如果有人要做一个系统贯彻这个理念,系统的类图如下:

图片

如果给“人”加一个约束:“中国人不需要蛋白质”,以下合适的是:

 A) 国籍 = 国家::中国 or所摄取食物类型s.成分类型s->excludes(物质类型::蛋白质)

 B) 国籍 = 国家::中国 and所摄取食物类型s.成分类型s->excludes(物质类型::蛋白质)

 C) 所摄取食物类型s.成分类型s->includes(物质类型::蛋白质) or国籍 = 国家::中国

 D) 国籍 <> 国家::中国 or所摄取食物类型s.成分类型s->excludes(物质类型::蛋白质)

9 [单选]

某著名的短视频平台的开发人员正在开发TikiTaka商城系统,发现关系数据库"商品"表中,有些行的"虚拟商品兑换码"列为空,有些行的"单位重量"列为空。从面向对象建模的角度看,这可能犯了什么错误?

 A)忽略了泛化关系

 B)把泛化当成关联

 C)把关联当成泛化

 D)把设计当成需求

10 [单选]

下图描述了一个从领域素材到代码的演变过程,其中有一步是多余的,但很容易被伪创新爱好者当作“突破”、“得到了更深刻的领域模型”,从而达成其有意无意追求的“假装思考 实则批量刷废话”的效果。这一步是:

图片

 A) ①

 B) ②

 C) ③

 D) ④

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值