#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. На самом деле я смотрю что-то простое, но полезное и думаю о производительности в приложении. спасибо за ваши комментарии