服务接口 - 几种方法的比较

时间:2011-09-19 17:43:01

标签: c# .net soa

我很难决定哪种方法更好:

interface IService {
  ISomething CreateSomething();
}

interface ISomething {
  void Do(string parameter);
}

VS

interface IService {
  ISomething CreateSomething();
  void DoSomething(ISomething something, string parameter);
}

VS

interface IService {
  ISomething CreateSomething();
  void DoSomething(int somethingId, string parameter)
}

VS

interface IService {
  int CreateSomething(); // returns something.Id
  void DoSomething(int somethingId, string parameter);
}

vs任何其他......

IService接口应该以多种不同的方式使用:

  • 作为班级图书馆
  • 作为WCF服务
  • 作为XML服务
  • 作为JSON服务

ISomething可能有许多客户端想要调查的属性,以及它可能执行的许多操作。 ISomething只是我需要以这种方式公开的十几个类中的一个。 ISomething可能会返回更多我可以执行操作的接口。

我会感激任何建议和想法。

修改

我们的想法是创建一个服务,允许用户构建工作流图,并支持设计师。我的要求是拥有支持任何客户端风格的服务代码(因此int参数接近)。与此同时,我不想遇到类型和方法的爆炸。

也许最好的方法是将其设计为功能丰富的.NET库,并为可能正在消耗它的任何渠道创建外观(?)?

2 个答案:

答案 0 :(得分:2)

我会用:

interface IService {
  ISomething CreateSomething();
  void DoSomething(int somethingId, string parameter)
}

imho会产生最少的流量,因为如果你只是从CreateSomething返回ID,如果你需要处理的细节,你最有可能再做一次旅行。

使用DoSomething中的ID可以获得最少的流量,因为似乎没有必要使用整个对象。

始终尝试设计服务接口,以便您必须尽可能多地使用一些电话来执行您想要的操作。这也意味着很难告诉你答案,因为我不知道预期的目的。

答案 1 :(得分:1)

我看到的问题是你希望一个类同时成为一个服务和数据契约。 ISomething不能是接口,因为您实际传递具体类型,并且您的客户应该知道它们的结构。所以我的建议是服务仍然是服务,数据合同仍然存在。

class Something
{
}

interface IService {  
  void Do(string parameter);
  Something GetSomething();
}

class SomeService : IService {
  private Something smth;  

  public void SomeService()
  {
    smth = CreateSomething();
  }

  public void Do()
  {
    //
  }

  public Something GetSomething()
  {
    return smth;
  }
}