У меня смоделирован набор объектов, которые соответствуют реальному миру
концепции.
TradeDrug, GenericDrug, TradePackage, DrugForm
В основе простой объектной модели, которую я пытаюсь представить, лежит сложность
медицинская терминология, которая использует числовые коды для представления отношений
и концепции, все доступные через службу REST - я пытаюсь
скрыть часть этой сложности с помощью обертки объектов.
Чтобы привести конкретный пример
Я могу позвонить
TradeDrug d = Searcher.FindTradeDrug("Zoloft") or
TradeDrug d = new TradeDrug(34)
где 34 может быть кодом для Zoloft. Это проконсультирует удаленный
сервер, чтобы узнать некоторые подробности о Zoloft. Я мог бы тогда позвонить
GenericDrug generic = d.EquivalentGeneric()
System.Out.WriteLine(generic.ActiveIngredient().Name)
чтобы вернуть дженерик сертралин как объект (снова через
фоновый вызов REST на удаленный сервер, на котором есть все эти наркотики
детали), а затем, возможно, найти его ингредиент.
Эта модель отлично работает и используется в некоторых приложениях.
которые включают обработку данных.
Недавно, однако, я хотел сделать
приложение Silverlight, которое использовало и отображало эти
объекты. Среда Silverlight позволяет только асинхронный
REST / веб-сервис звонки. У меня нет проблем с тем, как сделать
асихронные звонки - но у меня проблемы с чем
дизайн должен быть для моего объекта строительства.
В настоящее время конструкторы для моих объектов делают некоторые
REST вызывает синхронно.
public TradeDrug(int code)
{
form = restclient.FetchForm(code)
name = restclient.FetchName(code)
etc..
}
Если я должен использовать асинхронные «события» или «действия» для использования
веб-клиент Silverlight (я знаю, что Silverlight может быть
вынужден быть синхронным клиентом, но меня интересует
асинхронные подходы), есть ли у кого-нибудь руководство
или лучшая практика для того, как структурировать мои объекты.
Я могу передать обратный вызов действия конструктору
public TradeDrug(int code, Action<TradeDrug> constructCompleted)
{
}
но тогда это позволяет пользователю иметь TradeDrug
экземпляр объекта до того, что я хочу построить
на самом деле закончен. Это также не поддерживает
асинхронный шаблон 'событие', потому что объект не существует
добавить событие, пока оно не будет построено.
Расширение этого подхода может быть фабричным объектом, который сам по себе
имеет асинхронный интерфейс к объектам
factory.GetTradeDrugAsync(code, completedaction)
или с событием GetTradeDrugCompleted?
У кого-нибудь есть рекомендации? Кто-нибудь знает
как новая Reactive Framework может вписаться в любой
решение?