设计应用数据(第03课)——Tim Corey的深入探讨
在"C#应用程序从开始到结束"课程的第三课中,蒂姆·科里带我们通过关键的一步数据设计。 他解释说,在开始构建用户界面或编写代码之前,您首先必须定义应用程序将使用的数据结构。
在本文中,我们将探索蒂姆对锦标赛跟踪器应用程序设计数据的方法,并遵循视频中的具体解释和示例。 我们将更深入地了解应用程序设计的主题,使用蒂姆的视频来理解为什么数据设计很重要以及如何影响整个应用程序。
为什么数据优先
蒂姆在课程开始时提醒我们,我们已经建立了应用程序的要求和结构。 现在是时候构建实际的数据结构了。 他指出,一些开发者喜欢先设计UI,但他认为最成功的方法是先设计数据。
蒂姆解释了他的理由:
"没有数据,您的应用程序就没有意义。" 他澄清了应用程序本质上是一个展示、操作、修改和保存数据的工具。
然后,他举例来证明他的观点。 即使是像Microsoft Word这样的文本编辑器也是围绕数据构建的——文本本身、格式、间距等。蒂姆进一步证明甚至游戏也是数据驱动的。 例如,国际象棋游戏只是棋子、位置和移动的集合——都是数据。 一款第一人称射击游戏也严重依赖于数据,如角色位置、子弹速度、命中检测、伤害数值和胜利条件。
他的结论很明确:
"一切都围绕着数据。"
所以他以数据设计开始,因为一旦知道了数据,UI就更容易构建。 否则,您就是在一个没有方向的空白板上设计。 这种方法有助于为像视觉套件、海报制作器或标志制作器这样的工具工作的开发者和设计师,因为即使这些应用程序也依赖于结构化数据来创建模板、字体和图像元素。
在编码前计划
然后蒂姆解释了他首选的计划方法: 他把所有东西画在纸上或白板上,因为这样易于更改和调整。
他强烈建议不要打开Visual Studio,强调计划应该在代码之外进行。 他说,用记事本或法令纸计划是至关重要的,因为您可以轻松地划掉和更改内容,而不会被卡在代码中。
蒂姆展示了他的设计的清晰版本,并一步步走过。他的第一条规则是:
"先随便写点什么。"
他从最明显的对象开始:团队。
构建团队对象
蒂姆通过写下一个团队需要什么来开始设计。 他识别了两个主要属性:
1. 团队成员
他指出,一个团队需要人,所以他写下一个人的名单:
"我知道我需要一个有人的团队。"
他解释说,他还不需要构建人物对象。 相反,他首先专注于团队,并写下创建人物的注意事项。 这保持了设计的重点,避免了失去主要对象的轨迹。
2. 团队名称
接下来,蒂姆将团队名称添加为字符串。
他解释说,团队类很简单,只需要几个关键属性。 他说,团队名称应该是令人难忘的,比如"Tim Bob Maris Su Al"或"乒乓球锦标赛",这有助于品牌和识别,类似于企业如何使用标志、品牌或公司名称。
设计人物对象
接下来,蒂姆设计了人物类。 他解释了将名称分为姓和名的重要性。
为什么要分开姓和名?
蒂姆说这是业界的最佳实践,有助于个性化,例如在电子邮件中称呼某人时使用其名字。
他还警告有关名字分裂的问题:
"范·怀尔德"不是"怀尔德"
- "玛丽·苏"不是"玛丽"
所以蒂姆强调,姓和名的分离应该在输入阶段完成,而不是后期分割。
其他属性
蒂姆添加了更多字段:
电子邮件地址(字符串)
- 手机号码(字符串)
他强调手机号码应该存储为字符串,因为它们不是用于计算或操作的数字。 它们可能包括格式化,如括号和破折号。
蒂姆还澄清说,他使用"属性"这个词,因为将来这些会成为C#中的类属性。
锦标赛对象
接着蒂姆介绍了最重要的对象:锦标赛。
他解释说,锦标赛是核心数据中心,因为这个应用程序是一个锦标赛跟踪器。
锦标赛属性
蒂姆列出了锦标赛所需的内容:
锦标赛名称 即使它不在要求中,他也添加了它,因为同时可以存在多个锦标赛。 名称有助于区分它们。
入场费 蒂姆解释说,入场费允许管理员在团队进入时收费。 他强调入场费必须存储为小数,而不是双精度,因为这是金钱。
已注册团队 参加锦标赛的团队列表。
奖品 奖品列表,可以是零个或多个。
回合 这部分很复杂。 蒂姆解释说,每轮包含对阵,因此结构变为列表的列表:
第1轮:对阵列表
第2轮:对阵列表
- 第3轮:对阵列表 因此,回合 = 列表<列表>
蒂姆指出,在这一点上,奖品和对阵对象尚未创建,但没关系,因为它们将会在以后开发。
自然键和遗漏数据
蒂姆警告您在计划时可能会遗漏一些数据。 他谈到自然键以及一些开发者如何使用它们作为标识符。 例如,锦标赛名称可以是唯一的并作为标识符。
但是,蒂姆更喜欢使用自定义ID属性:
"我喜欢创建自己的并称其为ID。"
他说这更便于索引和管理。
他还提醒我们:
"遗漏东西没关系。"
他鼓励进行研究,并查看像亚马逊注册或电话联系人这样的例子,以查看通常为个人收集的信息。
但他警告不要过于考虑——错误会发生,可以稍后修正。
不要计划过度
蒂姆强调保持关键的平衡:
"一个仍在法令纸上的设计精良的应用程序是没有用的。"
他解释说,计划是必要的,但花费过多的时间计划会导致您永远无法构建应用程序。 他鼓励向前推进,同时接受设计将会发展。
奖品对象
蒂姆介绍了奖品对象及其属性:
名次编号(整型) 例如:1代表第一名,2代表第二名。
名次名称(字符串) 例如:"冠军","第一名亚军"。
奖金金额(小数) 该名次的金额。
- 奖金百分比(双精度) 例如:0.5代表50%
他解释了系统如何根据金额或百分比哪个不为零来决定使用金额或百分比。
对阵对象
然后,Tim 介绍了对阵对象:
参赛者:MatchupEntry列表
获胜者:团队
- 回合数:int
他解释说,对阵参赛者代表一个对阵中的一支队伍。
对阵参赛者对象
Tim 描述了 MatchupEntry 的属性:
团队
得分
- 父对阵
他解释了为什么选择参赛列表而不是单独的球队属性。 这允许灵活性,例如按得分排列参赛者。
他还解释了父对阵的目的: 它将一轮的获胜者连接到下一轮。
结论 - 数据计划完成
Tim 总结道,这六个类(团队、个人、锦标赛、奖项、对阵、对阵参赛者)是应用程序的基础。 他提醒我们,数据计划已完成,下一课将专注于构建用户界面。
他最后说,虽然这个设计可能看似混乱,但一旦在代码中实现后会变得更清晰。
通过在视频中遵循 Tim 的数据优先方法,您现在清楚地理解了如何为锦标赛跟踪器应用程序构建核心数据。 接下来的步骤是基于这些数据构建用户界面,Tim 会在第四课中介绍。

