Интерфейс IService для вызова сервисов. Один прокси на метод или глобальный прокси уровня класса - PullRequest
2 голосов
/ 04 ноября 2010

Я использую службы WCF из приложения Silverlight (MVVM) и Windows Phone. У меня есть класс Service (автоматически сгенерированный), и один IServiceRepository выглядит следующим образом

public interface IServiceRepository
{
  event EventHandler<SomeEventArgs> GetDataCompleted;
  void Data GetData();
  // 10 more methods for fetching different data.
}

Мой SerViceRepository выглядит следующим образом

 public class ServiceRepository : IServiceRepository
    {
       public event EventHandler<SomeEventArgs> GetDataCompleted;

       public void Data GetData()
       {
          var proxy = new ActualServiceRefClient();
          proxy.GetDataCompleted += PrivateGetDataCompleted;
          proy.GetDatAsync();
       }

       private void PrivateGetDataCompleted(object s, SomeEventArgs e)
       {
         // Error check and all
         if(GetDataCompleted != null)
            GetDataCompleted(this, new SomeEventArgs(...));
       }
    }

Я вызываю этот метод из моих ViewModels. Теперь мои вопросы ...

  1. Прямо сейчас я создаю прокси класс и прикрепляемый обработчик событий с этим в каждом методе. Я должен делать это в конструкторе ServiceRepository? Как я уже сказал, у меня есть от 10 до 12 методов обслуживания звоните.
  2. Должен ли я отменить регистрацию обработчика событий в завершенном методе?

1 Ответ

2 голосов
/ 08 ноября 2010
  1. Я не уверен, что имеет значение, куда это идет. Если у вас есть только один фактический метод обслуживания, который вы вызываете, то имеет смысл поместить проводку события в конструктор. Если для каждого из 10 методов данных в вашем хранилище сервисов существует один фактический метод обслуживания, то имеет смысл использовать их в каждом из 10-12 отдельных методов.

  2. Это зависит. Если вы храните экземпляр хранилища сервисов, делая несколько вызовов к нему, то вам следует либо переместить проводку событий в конструктор, либо убедиться, что вы не подключаете обработчик событий при каждом вызове. В качестве альтернативы, вы МОЖЕТЕ отменить регистрацию, как вы сказали, но я думаю, что лучше всего зарегистрировать эти обработчики событий один раз за время существования объекта. Если вы просто создаете новый экземпляр сервисного репозитория для каждой банки, нет необходимости отменять регистрацию обработчиков событий.

Надеюсь, это поможет!

...