Ian*_*ose 11 .net c# database design-patterns
我们有很多关于数据行" Ids "的代码; 这些主要是整体或指导.我可以通过为每个数据库表的id 创建一个不同的结构来使这段代码更安全. 然后类型检查器将帮助查找传递错误ID的情况.
例如,Person表有一个列调用PersonId,我们的代码如下:
DeletePerson(int personId)
DeleteCar(int carId)
Run Code Online (Sandbox Code Playgroud)
拥有以下内容会更好吗:
struct PersonId
{
private int id;
// GetHashCode etc....
}
DeletePerson(PersionId persionId)
DeleteCar(CarId carId)
Run Code Online (Sandbox Code Playgroud)
有没有人有过这个真实的生活经历?
是否值得开销?
或者更痛苦那么值得吗?
(它还可以更容易地更改主键数据库中的数据类型,这是我首先想到的这种理想方式)
请不要说使用ORM对系统设计进行一些其他重大改动,因为我知道ORM会是一个更好的选择,但目前我的力量并不是我的权力.但是,我可以对上面正在进行的模块进行如上所述的微小更改.
更新: 请注意,这不是Web应用程序,并且Ids保存在内存中并通过WCF传递,因此没有转换到/来自边缘的字符串.没有理由WCF接口不能使用PersonId类型等.PersonsId类型等甚至可以在WPF/Winforms UI代码中使用.
系统中唯一固有的"无类型"位是数据库.
这似乎取决于花时间编写代码可以更好地检查代码或花费时间编写更多单元测试的成本/收益.我更倾向于花时间进行测试,因为我希望在代码库中至少看到一些单元测试.
我不会为此创建一个特殊的 id。这主要是一个测试问题。您可以测试代码并确保它执行预期的操作。
您可以创建一种在系统中执行操作的标准方法,而不是通过传递要操作的整个对象来帮助将来的维护(类似于您提到的)。当然,如果您命名了参数 (int personID) 并有文档,那么任何非恶意程序员在调用该方法时都应该能够有效地使用代码。传递整个对象将进行您正在寻找的类型匹配,这应该足以成为标准化的方式。
我只是认为建立一个特殊的结构来防止这种情况增加更多的工作却收效甚微。即使您这样做了,有人也可能会找到一种方便的方法来创建“辅助”方法并绕过您放置的任何结构,因此这实际上并不能保证。
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |