假设我的数据库中有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语句中编写相同的代码?
答案 0 :(得分:2)
您可以创建这些类将实现的接口。然后使用
IRepository repository;
// your switch here
//switch() { case x: repository = new TypeRepository(); }
repository.GetItem(id);
repository.Save();
您还可以创建存储库dynamic
dynamic repository;
该类型将在运行时解析。
答案 1 :(得分:1)
使用.getItem(id)和.Save()的虚方法创建父类(RepositoryBase),从中继承,并在PeopleRepository,TaskRepository和ProjectRespository的每个实现中覆盖这些方法。
另一种选择是创建一个三者都可以使用的接口(IRepository)。