0

我们正在创建一个 Web 服务来接收一个值(字符串)。根据字符串,我们判断是“type 1”还是“type 2”,以及在处理方面需要做什么。所以我的网络服务设置为使用以下方式接收数据: http ://www.mysite.com/service.asmx?op=ProcessData?DataID=string

发送字符串的客户端希望使用 2 个不同的请求发送它: http://www.mysite.com/service.asmx?op=ProcessData?DataIDType1=string http://www.mysite.com/service.asmx?op =ProcessData?DataIDType2=字符串

我可以知道他发送的是哪种类型吗?我不能为此设置不同的签名吗?因为它们都是相同的参数?

4

2 回答 2

0

一个方法应该有一个单一的职责,因此我会推荐两种方法。

public void FirstMethod(string param)
{
// Do something.
}

public void SecondMethod(string param)
{
// Do something.
}

这代表了良好的设计,并且当客户想要添加更多功能时,后期可维护性的头痛无疑对您来说更容易!

于 2013-08-21T15:38:49.567 回答
0

这类似于写作:

public void DoSomething(String inputA)
{
    ...
}

public void DoSomething(String inputB)
{
    ...
}

它不起作用(并且有充分的理由!) - 方法签名是相同的。

想象一下电话:

MyClass.DoSomething("TEST");

它会调用哪个?它应该调用哪个?

您的选择(如我所见):

public void DoThingA(String input)
{
    ...
}

public void DoThingB(String input)
{
    ...
}

这将为您提供不同的方法签名,并表示您正在执行两个不同的操作(随后更清洁,IMO)。

如果您坚持使用单个方法签名,您可以这样做:

public void DoSomething(String input, object operationType) //where object is whatever type you see fit...
{
    if(operationType == ...)
    {
        DoThingA(input);
    }
    else
    {
        DoThingB(input);
    } 
}

或者...

public void DoSomething(String input)
{
    switch(input)
    {
        case "A":
            ...
            break;
        case "B":
            ...
            break;
        default:
            ...
            break;
    }
}

最合适的取决于您的可用选项。但我会创建两种方法。

于 2013-08-21T14:54:07.577 回答