我很难决定哪种方法更好:
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
接口应该以多种不同的方式使用:
ISomething
可能有许多客户端想要调查的属性,以及它可能执行的许多操作。 ISomething
只是我需要以这种方式公开的十几个类中的一个。 ISomething
可能会返回更多我可以执行操作的接口。
我会感激任何建议和想法。
修改
我们的想法是创建一个服务,允许用户构建工作流图,并支持设计师。我的要求是拥有支持任何客户端风格的服务代码(因此int
参数接近)。与此同时,我不想遇到类型和方法的爆炸。
也许最好的方法是将其设计为功能丰富的.NET库,并为可能正在消耗它的任何渠道创建外观(?)?
答案 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;
}
}