关于C#接口的问题

时间:2011-07-21 11:29:22

标签: c# interface

这是我的问题......

我在电信行业工作,拥有一个软件,可以为给定的服务号码或站点安装地址提供最佳网络。我的公司使用批发商的网络,我们也有自己的网络。为了评估客户可能获得的服务,我打电话给网络服务,找出给定电话交换机上可用的服务,并根据可用服务,我需要对我们的网络或批发网络进行一些检查。提供商。

我的问题是如何使用C#中的接口建模?我所拥有的软件没有使用任何接口和任何类,只是为了满足代码不能在类外生活的事实。

我熟悉接口的概念,至少在理论层面上,但不熟悉接口编程的概念。

我在想的是以下几行:

创建一个名为IServiceQualification的接口,该接口将定义一个操作:void Qualify()。有两个名为QualifyByNumber和QualifyByAddress的类,它们都实现了接口并定义了Qualify操作的细节。我是在思考正确的方向还是有一种不同的/更好的方法来解决这个问题。

我已经阅读了一些接口编程的例子,但是希望在工作情况下看到这个。

欢迎提出意见/建议。

3 个答案:

答案 0 :(得分:1)

我可能会让它更深一点,但你走在正确的轨道上。我个人使用Qualify方法创建IServiceQualification,然后在下面创建一个名为ServiceQualification的抽象类,它将有一个名为Qualify的抽象方法,任何类型的限定符类都可以实现。这使您可以定义限定符之间的共同行为(必然会有一些),同时仍然可以在高级别创建关注点分离。

接口具有明确的目的,并且正确使用它们可以让您以任何方式实现,而无需代码需要实现。因此,我们可以创建一个类似于:

的服务
public bool ShouldQualify(IServiceQualification qualification)

无论我们发送它的实现,这个方法都可行。它成为你工作时无需改变或修改的东西。此外,它会直接导致您的错误。如果有人报告地址资格不起作用,您就会知道在哪里查看。

答案 1 :(得分:1)

看一下策略设计模式。你描述的问题和方法听起来都非常接近。

http://www.dofactory.com/Patterns/PatternStrategy.aspx

答案 2 :(得分:1)

您应该根据合同来考虑接口。它指定一个类实现某些函数签名,这意味着您的类可以使用已知参数调用它们并期望返回某个对象 - 中间发生的事情由接口的开发者决定。这种松耦合使你的班级系统更灵活(它与保存击键冲浪无关)

下面是一个大致针对您的情况的示例(但需要更多建模)。

public interface IServiceQualification{
    bool Qualifies(Service serv);
}

public class ClientTelephoneService : IServiceQualification
{
    public bool Qualifies(Service serv){
       return serv.TelNumber.Contains("01234");
    }
}

public class ClientAddressService : IServiceQualification
{
    public bool Qualifies(Service serv){
       return serv.Address.Contains("ABC");
    }
}

//just a dummy service
public class Service{
    public string TelNumber = "0123456789";
    public string Address = "ABC";
}

//implementation of a checker which has a list of available services and takes a client who implements the
//interface (meaning we know we can call the Qualifies method
public class ClassThatReturnsTheAvailableServices
{
    //ctor
    List<Service> services = //your list of all services

    public List<Service> CheckServices(IServiceQualification clientServiceDetails)
    {
        var servicesThatQualify = new List<Service>();
        foreach(var service in services){
            if(clientServiceDetails.Qualifies(service)){
                 services.Add(service);
            }
        }
        return servicesThatQualify;
    }
}