From bb19987062af9a28aa5dea93cc0eba9ac3a7e1ab Mon Sep 17 00:00:00 2001
From: muqiuhan 以上// The fast double-to-(unsigned-)int conversion routine does not guarantee
// rounding towards zero.
// The result is undefined if x is infinite or NaN, or if the rounded
// integer value is outside the range of type int.
inline int FastD2I(double x) {
DCHECK(x <= INT_MAX);
DCHECK(x >= INT_MIN);
return static_cast<int32_t>(x);
}
与水平切片(即按技术分层,如先完成所有 UI,再完成所有后端逻辑)不同,垂直切片的目标是尽快交付一个虽小但完整可用的功能。
+想象一个蛋糕,垂直切片就像切下一块完整的蛋糕,包含从顶部到底部的每一层。在软件开发中,这意味着一个任务或用户故事的完成会涉及到:
+所以一个垂直切片代表了一个可以独立运行、测试和向用户展示的小功能。
+在实践中,用垂直切片进行任务拆分或许可以按照如下步骤来实现:
+一、**从用户故事开始 (Start with User Stories)**:明确用户需要什么功能以及这个功能为用户带来的价值。例如:“作为一个注册用户,我希望能用我的邮箱和密码登录系统,以便访问我的个人资料。”
+二、识别涉及的技术层面 (Identify Affected Layers)
+对于登录功能,需要考虑:
+三、创建可交付的小功能块 (Create Small, Deliverable Chunks)
+就是将一个大的用户故事拆分成更小的、但仍然是垂直的、可独立交付的故事。例如,可以将“用户登录”进一步细化:
+**切片1 (基础登录)**:用户可以使用正确的邮箱和密码成功登录。这包含了 UI 输入、后端验证和数据库查询。
+**切片2 (错误处理)**:用户输入错误的邮箱或密码时,系统给出明确的错误提示。这可能只涉及 UI 和业务逻辑层的少量修改。
+**切片3 (“记住我” 功能)**:用户可以选择“记住我”,下次访问时自动登录。这可能涉及 UI、业务逻辑和客户端存储。
+四、**确保每个切片都有价值 (Ensure Each Slice Has Value)**:每完成一个切片,都应该为用户或产品带来可感知的价值,并且理想情况下是可以演示给利益相关者看的。
+五、**保持切片足够小 (Keep Slices Small Enough)**:每个切片的工作量应该小到可以在一个迭代周期(例如 Sprint)内完成。这有助于团队保持专注,并快速获得反馈。
+这里有一些拆分技巧:
+