【发布时间】:2010-01-11 17:05:51
【问题描述】:
我们有很多关于“Ids”数据行的代码;这些主要是整数或指导。我可以通过为每个数据库表的 id 创建一个 不同的结构 来使这段代码更安全。 然后类型检查器将帮助查找传递错误 ID 的情况。
例如,Person 表有一个名为 PersonId 的列,我们的代码如下:
DeletePerson(int personId)
DeleteCar(int carId)
如果有会更好:
struct PersonId
{
private int id;
// GetHashCode etc....
}
DeletePerson(PersionId persionId)
DeleteCar(CarId carId)
有没有人有过真实的生活经历 东这个?
开销是否值得?
或者更多的痛苦值得吗?
(这也可以更容易地改变数据库中主键的数据类型,这是我最初想到的理想方式)
请不要说使用 ORM 对系统设计进行其他重大更改,因为我知道 ORM 会是更好的选择,但目前这不在我的能力范围内。不过,我可以对我目前正在开发的模块进行类似上述的小改动。
更新: 请注意,这不是一个 Web 应用程序,并且 Id 保存在内存中并通过 WCF 传递,因此在边缘没有与字符串之间的转换。 WCF 接口没有理由不能使用 PersonId 类型等。 PersonsId 类型等甚至可以在 WPF/Winforms UI 代码中使用。
系统唯一固有的“无类型”位是数据库。
这似乎取决于花费时间编写编译器可以更好地检查的代码或花费时间编写更多单元测试的成本/收益。我更愿意花时间进行测试,因为我希望在代码库中至少看到一些单元测试。
【问题讨论】:
-
类型检查器将如何帮助您检查是否传递了无效 ID?如果您的代码试图传递一个预期为 int 的 GUID,它无论如何都应该爆炸。我不确定您想要了解的内容是否会为您提供更多保护,但它会不必要地使您的代码混乱。
-
@Chris,对不起,我试图抓住一个 CarID 被传递到 PersonID 的情况,当它们都是整数时。
标签: c# .net database design-patterns