का उपयोग कर एक आरईएसटी क्लाइंट एपीआई बनाना मैं प्रतिक्रियाशील एक्सटेंशन (आरएक्स) के लिए सही उपयोग के मामलों के आसपास अपना सिर प्राप्त करने की कोशिश कर रहा हूं। उदाहरण आने वाले उदाहरण यूआई इवेंट (ड्रैग और ड्रॉप, ड्राइंग) हैं, और सुझाव हैं कि आरएक्स एसिंक्रोनस एप्लिकेशन/ऑपरेशंस जैसे वेब सेवा कॉल के लिए उपयुक्त है।प्रतिक्रियाशील एक्सटेंशन (आरएक्स)
मैं एक ऐसे एप्लिकेशन पर काम कर रहा हूं जहां मुझे एक आरईएसटी सेवा के लिए एक छोटा क्लाइंट एपीआई लिखना है। मुझे कुछ संदर्भ डेटा (हवाई अड्डे, एयरलाइंस और स्थिति) प्राप्त करने के लिए चार आरईएसटी एंड-पॉइंट्स, तीन कॉल करने की आवश्यकता है, और चौथा मुख्य सेवा है जो आपको किसी दिए गए हवाई अड्डे के लिए उड़ान का समय देगी।
मैं तीन संदर्भ डाटा सेवाओं को उजागर वर्गों बनाया है, और तरीकों कुछ इस तरह दिखाई:
public Observable<IEnumerable<Airport>> GetAirports()
public Observable<IEnumerable<Airline>> GetAirlines()
public Observable<IEnumerable<Status>> GetStatuses()
public Observable<IEnumerable<Flights>> GetFlights(string airport)
मैं प्रत्येक उड़ान के लिए एक संदर्भ हवाई अड्डे से प्रस्थान यह है रखना चाहते हैं, और मेरे GetFlights विधि में एयरलाइन उड़ान का संचालन कर रही है। ऐसा करने के लिए मुझे GetAirports और GetA Box से उपलब्ध होने की आवश्यकता है। प्रत्येक हवाई अड्डे, एयरलाइन और स्थिति को डिक्शनरी (यानी शब्दकोश) में जोड़ा जाएगा ताकि प्रत्येक उड़ान को पार करते समय मैं आसानी से संदर्भ सेट कर सकूं।
flight.Airport = _airports[flightNode.Attribute("airport").Value]
flight.Airline = _airlines[flightNode.Attribute("airline").Value]
flight.Status = _statuses[flightNode.Attribute("status").Value]
मेरे वर्तमान कार्यान्वयन अब इस तरह दिखता है:
public IObservable<IEnumerable<Flight>> GetFlightsFrom(Airport fromAirport)
{
var airports = new AirportNamesService().GetAirports();
var airlines = new AirlineNamesService().GetAirlines();
var statuses = new StatusService().GetStautses();
var referenceData = airports
.ForkJoin(airlines, (allAirports, allAirlines) =>
{
Airports.AddRange(allAirports);
Airlines.AddRange(allAirlines);
return new Unit();
})
.ForkJoin(statuses, (nothing, allStatuses) =>
{
Statuses.AddRange(allStatuses);
return new Unit();
});
string url = string.Format(_serviceUrl, 1, 7, fromAirport.Code);
var flights = from data in referenceData
from flight in GetFlightsFrom(url)
select flight;
return flights;
}
private IObservable<IEnumerable<Flight>> GetFlightsFrom(string url)
{
return WebRequestFactory.GetData(new Uri(url), ParseFlightsXml);
}
वर्तमान कार्यान्वयन सेर्गेई के जवाब पर आधारित है, और अनुक्रमिक निष्पादन सुनिश्चित करने के लिए ForkJoin का उपयोग करता है और मैं संदर्भ डेटा उड़ानों से पहले लोड हो जाता है कि। यह कार्यान्वयन मेरे पिछले कार्यान्वयन की तरह "संदर्भ डेटा लोडेड" ईवेंट को आग लगाने से अधिक सुरुचिपूर्ण है।
उत्तर अपडेट किया गया - भी, इस धागे पर एक नज़र डालें: http://social.msdn.microsoft.com/Forums/en/rx/thread/20e9fea1-304f-4926-aa02-49ed558a84f5 - दिखाता है कि कैसे अपना लिखना है कस्टम बफरिंग –