Несколько веб-сервисов, поэтому они являются многоэлементными

#vb.net #web-services

#vb.net #веб-сервисы

Вопрос:

ну, всем привет

у меня есть один проект с несколькими веб-сервисами, поэтому я создал различные одноэлементные классы, ориентированные на производительность. теперь я думаю создать один одноэлементный класс, в котором будут экземпляры моих веб-сервисов

пример

 public static WebServiceMaster
{
  internal ServiceX WebX;
  internal ServiceY WebY;
  ......
  public static WEbServiceMaster GetInstance()
  .....  
}
  

что вы думаете об этом?
это плохо?

Ну, наконец-то это сделано. Я знаю, что это не идеально

  Public NotInheritable Class ServiceProxySingleton

Private _services As IDictionary(Of ProxyServicesEnum, IServiceDispatcher) = New Dictionary(Of ProxyServicesEnum, IServiceDispatcher)
Private _dbRepository As IDACommon

Private Sub New()
  _dbRepository = New DACommon()
  LoadServices()
End Sub

Private Sub LoadServices()
  _services.Add(ProxyServicesEnum.eActivity, New ActivityServiceImp(_dbRepository))
  _services.Add(ProxyServicesEnum.eAvailability, New AvailabilityServiceImp(_dbRepository))
  _services.Add(ProxyServicesEnum.eBrochure, New BrochureServiceImp(_dbRepository))
  _services.Add(ProxyServicesEnum.eInformation, New InformationServiceImp(_dbRepository))
  _services.Add(ProxyServicesEnum.eMeetingRoom, New MeetingRoomServiceImp(_dbRepository))
  _services.Add(ProxyServicesEnum.eMembership, New MembershipServiceImp(_dbRepository))
  _services.Add(ProxyServicesEnum.eName, New NameServiceImp(_dbRepository))
  _services.Add(ProxyServicesEnum.eReservation, New ReservationServiceImp(_dbRepository))
  _services.Add(ProxyServicesEnum.eResvAdvanced, New ResvAdvancedServiceImp(_dbRepository))
  _services.Add(ProxyServicesEnum.eSecurity, New SecurityServiceImp(_dbRepository))
  _services.Add(ProxyServicesEnum.eStayHistory, New StayHistoryServiceImp(_dbRepository))
  _services.Add(ProxyServicesEnum.ePostXml, New PostXmlServiceImp(_dbRepository, ConfigurationServiceSingleton.GetInstance.GetPostXmlConfig))
  _services.Add(ProxyServicesEnum.eOxiHttp, New OxiServiceImp(_dbRepository))
End Sub

Public ReadOnly Property Service(ByVal serviceEnum As ProxyServicesEnum) As Object
  Get
    If _services.ContainsKey(serviceEnum) Then
      Return _services.Item(serviceEnum)
    End If
    Return Nothing
  End Get
End Property

Public ReadOnly Property GetMeta(ByVal serviceEnum As ProxyServicesEnum) As IDictionary(Of String, MethodIdentityAttribute)
  Get
    If _services.ContainsKey(serviceEnum) Then
      Return _services.Item(serviceEnum).MetaInfo
    End If
    Return Nothing
  End Get
End Property

Public Shared Function GetInstance() As ServiceProxySingleton
  Return NestedPrWireService._instance
End Function

Class NestedPrWireService
  Friend Shared ReadOnly _instance As ServiceProxySingleton = New ServiceProxySingleton()
  Shared Sub New()
  End Sub
End Class

End Class
  

комментарии и критические замечания приветствуются

Комментарии:

1. Взгляните на многотональные, может быть, это то, что вы ищете. en.wikipedia.org/wiki/Multiton_pattern#C.23 @Carlos и, кстати, одноэлементность не является шаблоном производительности. Возможно, вам также следует прочитать об этом

Ответ №1:

Очень хороший подход заключается в использовании внедрения зависимостей. Например, Unity.

Комментарии:

1. спасибо, у меня есть класс помощника, где на данный момент создана зависимость от поставки, эти помощники являются фасадом какого-то DAO, нового ServiceXDAO (WebServiceMaster. ServiceXInterface), новый ServiceYDAO (WebServiceMaster. ServiceYInterface). Возможно, хорошим подходом является использование ServiceLocator, но я не знаю, есть ли у этого опция для созданных одноэлементных сервисов

2. Unity может создавать эти объекты для вас: вы можете установить, какое время жизни вы хотите (для каждого экземпляра, одноэлементного или определить свое). И эту функциональность вы получаете прямо из коробки. Зачем изобретать велосипед? Итак, я не знаю, почему вы отклоняете этот ответ. Например, _container.Resolve<IMyService>() вернет новый MyService или уже созданный экземпляр MyService в зависимости от того, как вы настроили Unity.

3. зачем изобретать велосипед? не совсем, в данном случае я использую framework 2.0 и сотрудничаю с одной компанией extern, и они не имеют представления о DI, IoC. На самом деле я смотрю что-то простое, но полезное и думаю о производительности в приложении. спасибо за ваши комментарии