《软件方法》强化自测题-分析(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) ④

相关推荐
长不大的杨瑞杰6 分钟前
OpenCode v2 远程开发实战:Web UI、Pair、SSH 隧道与 OpenTunnel 安全接入
人工智能·安全·云计算·软件工程·devops
无心水18 分钟前
5、信息安全技术基础知识 核心学习笔
人工智能·学习·软考高级·架构师·软考·高级架构师·软考架构师
无心水34 分钟前
8、系统架构设计基础知识 核心考点与学习笔记
笔记·学习·系统架构·架构师·软考·软考架构师·软考高级架构师
长不大的杨瑞杰16 小时前
OpenCode v2 MCP 与插件体系实战:把数据库、工单和内部 API 安全接入 Agent
人工智能·安全·语言模型·软件工程·1024程序员节
rolt17 小时前
[存档]Alistair Cockburn-2003年11月UMLChina交流会
软件工程·产品经理·uml·敏捷开发·用例·cockburn
小王师傅6618 小时前
上帝之手:一个比喻在软件里的落点
软件工程·编程思想
TOSUN同星19 小时前
TSMaster 9月功能亮点:旋钮控件、三大模块、报文过滤、SOMEIP静态注册全升级
汽车·软件工程
rolt1 天前
[鉴赏]摇身一变鼓吹软件工程-01-Allen Holub
ai·软件工程·uml·敏捷开发
长不大的杨瑞杰2 天前
OpenCode v2 团队治理实战:多仓库 Policy、灰度发布与故障回滚
运维·人工智能·安全·软件工程·devops
梯度下降者3 天前
二、自动化运维架构师的三大核心能力
ci/cd·架构师·自动化运维·iac·平台工程