Использование весны, чтобы получить свой уровень обслуживания - хорошая идея? - PullRequest
0 голосов
/ 20 ноября 2008

Предположим, у меня есть сервисный слой, занимающийся спящим режимом и базами данных. Клиентам Silverlight и Windows необходимо получить служебный уровень через какой-либо удаленный сервис. ASP.NET выиграет, если получит его напрямую (на том же компьютере, тот же процесс, создание экземпляра класса).

Является ли хорошей идеей использовать Spring или другой инструмент, чтобы "получить" свой сервисный уровень через DI-контейнер и иметь возможность изменить конфигурацию позже?

1 Ответ

2 голосов
/ 20 ноября 2008

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

Это преимущество интерфейсов и DI, особенно при использовании контейнера, такого как Spring. Как только вы измените реализацию, просто сконфигурируйте spring для использования новой и все готово.


Обновление, потому что комментарии слишком малы:

Ну, я думаю, все зависит от вашего обслуживания. Дело в том, что если вы используете интерфейс (скажем, поверх NServiceBus), вы всегда можете создать адаптер для подключения реализации WCF к интерфейсу.

Например:

public interface IService {
   void DoSomething();
}

public class NServiceBusService : IService { 
   public void DoSomething() {
      //Some NServiceBusCode
   }
}

Теперь (я полагаю, я не очень знаком с spring.net), вы можете заставить Spring использовать NServiceBusService в качестве реализации IService.

А теперь вы решили вместо него подключить WCF? Вы могли бы просто иметь реализацию WCF:

public class WCFService : IService { 
   public void DoSomething() {
      //Some WCF Code
   }
}

И теперь вы можете настроить Spring на использование WCFService для IService вместо NServiceBusService.

Или, если ваш WCFService не совпадает с подписью для IService, как, возможно, это выглядит так:

public class WCFService { 
   public void DoSomethingWCFStyle() {
      //Some WCF Code
   }
}

Тогда вы можете просто использовать шаблон адаптера, чтобы заставить это работать:

public class WCFServiceAdapter : IService { 
   private WCFService wcfService;

   public WCFServicAdapter(WCFService wcfService) {
      this.wcfService = wcfService;
   }

   public void DoSomething() {
      wcfService.DoSomethingWCFStyle();
   }
}

Независимо от того, что есть способы для вас, чтобы ввести эту зависимость. Сложность в том, что вам нужно настроить контракт с использованием вашего интерфейса, и ваши объекты должны соблюдать этот контракт, иначе у вас будут проблемы. Но всегда есть способ отобразить (например, используя приведенный выше шаблон адаптера) объекты, чтобы они выглядели так, как будто они реализуют интерфейс и заставляют его работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...