1
我有一个关于泛型类型参数的问题。通用参数类型
比方说,我在我的域模型如下定义:
abstract class Entity<TId>
{
public TId Id { get; private set; }
/* ... */
}
class Person : Entity<long>
{
public string Name { get; set; }
/* ... */
}
现在,让我们说,我想创建,查看一个人的详细信息的方法:
public void Details(long? id)
{
if (!id.HasValue) {
Error(...);
return;
}
var person = PersonRepository.Get(id.Value);
ShowPersonDetail(person);
}
让我们进一步去PersonRepository是存储库的专业化,所以它的“Get”方法被“自动”实现,接受正确的强类型id参数(i在这种情况下,参数为long
)。
现在让我们假设有一天,我决定人的ID应该的GUID。我想要的是只能在我的Person类中更改它,并且它会在其他地方自动更改。如果我这样做,在我现在的代码中,PersonRepository.Get()方法不需要编辑,但我的Details()方法将不得不被更改。
我一直在寻找类似:
Details(Person.IdType id) { /*...*/ }
哦,顺便说一下,这个“细节”的方法将位于另一个组件,如果这可能改变什么......
但强烈-typed,它必须接受值类型或引用类型。
任何想法?
谢谢!
不完全是这样,Repository部分没有问题,没有funcs。问题在于我的领域模型范围之外的其他方法。尽管我会尝试使用lambda表达式。谢谢! – 2009-09-01 22:42:15