我有一个数据提供程序项目来访问数据库。这是由各种类组成的(PersonDataProvider,JobDataProvider ...) 我想创建一个接口。 我是否必须为每个类创建一个接口? 我很想创建一个接口而不是继承所有类。这涉及使所有项目类部分并更改类名.......但我认为这不是最好的解决方案。 有什么建议吗?
答案 0 :(得分:5)
您不会继承实现它的接口。没有必要让一个类部分为它添加接口。
接口是类订阅的合同,表示它将遵循接口中描述的方法并将适当地实现它们。对于您的场景,您将创建一个单独的接口并在您的类中实现它,然后您可以将各种存取器类的实例作为接口的实例传递。
例如:
public interface IDataProvider
{
void LoadData();
}
数据提供者将如下所示:
public class MyDataProvder1 : IDataProvider
{
// Some methods
// Must implement LoadData
public void LoadData()
{
// Do something
}
}
public class MyDataProvder2 : IDataProvider
{
// Some methods
// Must implement LoadData
public void LoadData()
{
// Do something
}
}
然后,您可以将对象作为IDataProvider传递,如下所示:
IDataProvider DataProviderA = new MyDataProvider1();
IDataProvider DataProviderB = new MyDataProvider2();
// Call function that expects an IDataProvider
DoSomething(DataProviderA);
DoSomething(DataProviderB);
...
public void DoSomething(IDataProvider DataProvider)
{
DataProvider.LoadData();
}
希望能为你清除它。
答案 1 :(得分:4)
我认为你正在接近这个。
当你创建一个界面时,你正在为这些课程签订合同。可以把它想象成“我的班级充当 IMyInterface”。
如果你的所有类都有一个共同的使用场景,那么一个公共接口可能是合适的(IDataProvider
,给定类名......?)。
答案 2 :(得分:0)
使用界面取决于您希望如何安排课程。接口允许某种即插即用的行为。因此,如果您需要单个接口,这意味着您将在实现该接口的所有类中拥有一组接口。在这种情况下,您的类PersonDataProvider,JobDataProvider等将具有相同的方法集。如果您觉得,他们需要与众不同,并且仍然可以通过单一的提供者外观,您可以考虑使用外观模式。
Facade将为各个提供者提供接口,提供者类将实现它们。
答案 3 :(得分:0)
首先,我假设所有xDataProvider
类都有标准的方法调用。例如,SelectPerson
类上有Select
方法,而不是PersonDataProvider
方法。如果没有,你有一些工作要做,使其成为一个有效的练习。
在Visual Studio中,有一个 Extract Interface 重构选项。右键单击xDataProvider类,然后选择 Refactor - Extract Interface 。现在命名它(例如IDataProvider)并在界面中选择所需的方法/属性,单击OK,然后单击此类完成。
然后在其他xDataProvider类中实现此IDataProvider接口。假设您已经在所有DataProvider类中实现了类似的方法,则不必再编写任何代码(: IDataProvider
之外)。