Proxy-assembly till tjänster

På samma tema som Adminklient till entitetstjänster, dvs förenkling av utveckling i en SOA-miljö, kommer här en liten beskrivning av hur vi försöker göra det lättare att konsumera våra interna webbtjänster. Observera att samma "disclaimers" som i förra avsnittet gäller även nu..

Sammanhang

Du har identifierat ett antal tjänster av enklare typ som kommer att behöva användas av ett flertal konsumenter. Att konsumera en webbtjänst må vara förhållandevis enkelt i .NET tack vara de proxies som skapas av "Add Web Reference", men du skulle vilja ha lite "genvägar" in till tjänsten; kanske en möjlighet att cacha anropen in process, kanske några överlagringar som hjälper till med default-värden, kanske lite hjälpklasser för att bygga ihop requestobjekt etc.

Problem

Det "korrekta" sättet att förenkla åtkomst till en webbtjänst är att i varje konsument skriva den kod som passar bäst för just den konsumenten. Om många konsumenter har väldigt lika krav leder detta dock till att samma kod kommer skrivas på flera olika ställen.

Lösning

Skapa ett gemensamt Proxy-assembly som innehåller den kod som gör det möjligt att kommunicera med webbtjänsten. Detta assembly har samma status som en konsument, dvs den talar med tjänsten enbart via dess kontrakt. Proxy-assemblyt distribueras till de konsumenter som vill ha hjälp att använda tjänsten tillsammans med tjänstens schema.

Fördelar

 

  • Klienter som vill ha åtkomst till tjänsten slipper skriva egen kod för att förenkla denna åtkomst.
  • Utvecklaren av tjänsten (som oftast blir den som skriver Proxy-assemblyt) är troligtvis den som bäst kan avgöra hur åtkomsten av tjänsten kan förenklas.

Nackdelar

 

  • Konsumenten blir beroende av en binär som produceras av ett annat projekt. Detta kan tyckas bryta mot SOAs grundpelare. Eftersom Proxy-assemblyt enda koppling till tjänsten är dess schema blir dock detta beroende inte lika starkt som om konsumenten direkt utnyttjat de interna klasserna i tjänsten. Så länge schemat är intakt så behöver inte Proxy-assemblyt bytas ut.

Kommentarer? Egna idéer som löser samma problem? Skriv!