假设我的数据库中有3个表:人员,任务和项目
假设我有3个存储库类:PeopleRepository, TaskRepository和ProjectRepository。
现在我想要一个单一的方法,它可以与这些类中的任何一个一起工作。
显然,我可以为每个表编写大量代码,但我宁愿将代码减少到最少。对于可能传递给方法的不同列名,我已经有了反射,但是我似乎无法让这样的代码工作。
switch (tableName)
{
case "people":
var repository = new PeopleRepository();
break;
case "tasks":
var repository = new TaskRepository();
break;
case "projects":
var repository = new ProjectRepository();
break;
}
//Modify respective database table
repository.getItem(id); //etc
repository.Save(); //etc
我试过其他一些类似的事情,但它们似乎都不起作用。改变变量定义的范围等
我觉得c#应该有一些好的东西来处理这个,是这样吗?还是我必须在每个switch语句中编写相同的代码?
您可以创建一个这些类将实现的接口。然后使用
IRepository repository;
// your switch here
//switch() { case x: repository = new TypeRepository(); }
repository.GetItem(id);
repository.Save();
您也可以使存储库dynamic
dynamic repository;
类型将在运行时解析
为。getitem (id)和。save()创建一个父类(RepositoryBase),使用虚拟方法,从它继承,并在PeopleRepository, TaskRepository和projectresposititory的每个实现中重写这些方法。
另一个选择是创建一个接口(IRepository),这三个都可以使用。