Сервисный интерфейс - сравнение пары подходов - PullRequest
0 голосов
/ 19 сентября 2011

Мне трудно решить, какой подход лучше:

interface IService {
  ISomething CreateSomething();
}

interface ISomething {
  void Do(string parameter);
}

против

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

против

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

против

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

против любых других ...

Интерфейс IService предполагается использовать различными способами:

  • Как библиотека классов
  • в качестве службы WCF
  • в качестве службы XML
  • в качестве службы JSON

ISomething может иметь ряд свойств, которые будут необходимы клиентурасследовать и ряд операций, которые он может выполнять.ISomething - это всего лишь один из десятков классов, которые мне нужно раскрыть таким образом.ISomething может вернуть больше интерфейсов, с которыми я могу выполнять операции.

Я буду признателен за любые предложения и мысли.

РЕДАКТИРОВАТЬ:

Идея состоит в том, чтобы создать сервис, который позволит пользователям создавать график рабочего процесса и будет поддерживать дизайнера.Мои требования состоят в том, чтобы иметь сервисный код, который будет поддерживать любой вариант клиента (поэтому подходит параметр int).В то же время я не хочу сталкиваться с множеством типов и методов.

Возможно, лучшим подходом было бы создать ее как многофункциональную библиотеку .NET и создать фасады (?) Для любыхканалы, которые могут потреблять это?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Я бы использовал:

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

imho, это будет генерировать наименьшее количество трафика, поскольку, если вы просто вернете идентификатор из CreateSomething, вы, скорее всего, совершите еще одну поездку, если вам понадобятся детали для обработки.

Использование идентификатора в DoSomething дает вам наименьший трафик, так как весь объект не нужен.

Всегда старайтесь разрабатывать сервисные интерфейсы, чтобы вам приходилось использовать как можно меньше вызовов, чтобы делать то, что вы хотите. Это также означает, что трудно сказать вам ответ, так как я не знаю предполагаемой цели.

1 голос
/ 19 сентября 2011

Проблема, которую я вижу, заключается в том, что вы хотите, чтобы класс был одновременно контрактом на обслуживание и передачу данных.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;
  }
}
...