Mönstret Serverdelar för klienter
Skapa separata serverdelstjänster som ska förbrukas av specifika program eller gränssnitt i klientdelen. Det här mönstret är användbart när du vill undvika att behöva anpassa en enda serverdel för flera gränssnitt. Det här mönstret beskrevs först av Sam Newman.
Kontext och problem
Ett program kan ursprungligen vara riktat mot ett webbanvändargränssnitt på en stationär dator. Normalt utvecklas parallellt en serverdelstjänst som tillhandahåller de funktioner som behövs för användargränssnittet. När programmets användarbas växer utvecklat en mobilapp som måste interagera med samma serverdel. Serverdelstjänsten blir en generell serverdel som tillgodoser kraven för både stationära datorer och mobilgränssnitt.
Men funktionerna i en mobil enhet skiljer sig avsevärt från en webbläsare på skrivbordet vad gäller skärmstorlek, prestanda och visningsbegränsningar. Kraven för en mobilapps serverdel skiljer sig därför från webbgränssnittet för en skrivbordsdator.
Dessa skillnader resulterar i skilda krav på serverdelen. Serverdelen kräver regelbundna och betydande ändringar för att fungera för både skrivbordsdatorns webbgränssnitt och mobilappen. Ofta arbetar separata gränssnittsteam på varje klientdel, vilket gör att serverdelen blir en flaskhals i utvecklingsprocessen. Motstridiga krav och behovet av att hålla tjänsten fungerande för båda klienterna kan resultera i att du lägger ned mycket arbete på en enskild distribuerbar resurs.

När utvecklingen fokuserar på serverdelstjänsten, kan du skapa ett separat team för att hantera och underhålla serverdelen. Till slut resulterar detta i att gränssnittets och serverdelens utvecklingsgrupper förlorar kontakten, vilket är en belastning för serverdelsteamet när de måste balansera de konkurrerande kraven från de olika gränssnittsteamen. När ett gränssnittsteam kräver ändringar i serverdelen, måste ändringarna verifieras med andra gränssnittsteam innan de kan integreras i serverdelen.
Lösning
Skapa en serverdel per gränssnitt. Finjustera beteendet och prestanda för varje serverd så att de bäst matchar behoven i frontend-miljön, utan att du behöver bekymra dig om att påverka andra miljöer på serversidan.

Eftersom varje serverdel är specifik för ett gränssnitt, kan den optimeras för det gränssnittet. Därför blir den mindre, mindre komplex och förmodligen snabbare än en gemensam serverdel som används för att uppfylla kraven för alla gränssnitt. Varje gränssnittsteam har självständigt ansvar för sin egen serverdel och förlitar sig inte på ett centralt utvecklingsteam för serverdelen. Detta ger gränssnittsteamet flexibilitet i val av språk, versionstakt, prioritering av arbetsbelastning och funktionsintegrering i sin serverdel.
Mer information finns i Mönster: serverdelar för klienter.
Problem och överväganden
- Överväg hur många serverdelar du ska distribuera.
- Om olika gränssnitt (till exempel mobilklienter) gör samma begäranden, bör du fundera över om det är nödvändigt att implementera en serverdel för varje gränssnitt, eller om en enda serverdel räcker.
- Koddubblering för olika tjänster är mycket sannolikt när du implementerar det här mönstret.
- Klientfokuserade servertjänster får endast innehålla klientspecifik logik och klientspecifikt beteende. Allmän affärslogik och andra globala funktioner bör hanteras någon annanstans i ditt program.
- Tänk på hur det här mönstret kan återspeglas i ansvaret för ett utvecklingsteam.
- Överväg hur lång tid det tar att implementera det här mönstret. Kommer arbetet med att skapa nya serverdelar dra på sig tekniska skulder, samtidigt som du fortsätter att stödja den befintliga allmänna serverdelen?
När du ska använda det här mönstret
Använd det här mönstret i sådana här scenarier:
- En delad eller allmänna serverdelstjänst måste underhållas med betydande utvecklingskostnader.
- Du vill optimera serverdelen för krav från specifika klientgränssnitt.
- En generell serverdel anpassas för att den ska kunna klara flera gränssnitt.
- Ett annat språk passar bättre för serverdelen för ett annat användargränssnitt.
Det här mönstret kanske inte lämpar sig:
- När gränssnitt gör samma eller liknande begäranden till serverdelen.
- När endast ett gränssnitt används för att interagera med serverdelen.