Háttérrendszerek és előtérrendszerek mintaBackends for Frontends pattern

Elkülönített, adott előtérbeli alkalmazások vagy felületek által használt háttérszolgáltatásokat hozhat létre.Create separate backend services to be consumed by specific frontend applications or interfaces. Ez a minta akkor hasznos, ha el szeretné kerülni, hogy egyetlen háttérkiszolgálót több felülethez is testre kelljen szabnia.This pattern is useful when you want to avoid customizing a single backend for multiple interfaces. A mintát először Sam Newman írta le.This pattern was first described by Sam Newman.

Kontextus és problémaContext and problem

Egy alkalmazás kezdetben egy asztali webes felhasználói felületet célozhat.An application may initially be targeted at a desktop web UI. Általában ezzel párhuzamosan fejlesztik a háttérszolgáltatást, amely az adott felhasználói felület szolgáltatásait biztosítja.Typically, a backend service is developed in parallel that provides the features needed for that UI. Az alkalmazás felhasználói bázisának növekedésével idővel fejlesztenek egy mobilalkalmazást is, amelynek ugyanazzal a háttérrendszerrel kell együttműködnie.As the application's user base grows, a mobile application is developed that must interact with the same backend. A háttérszolgáltatás általános célú háttérrendszerré válik, amely az asztali és a mobilfelületek igényeit egyaránt kiszolgálja.The backend service becomes a general-purpose backend, serving the requirements of both the desktop and mobile interfaces.

A mobileszköz képességei azonban jelentősen eltérnek az asztali böngészőtől, a képernyőméret, a teljesítmény és a megjelenítési korlátozások tekintetében.But the capabilities of a mobile device differ significantly from a desktop browser, in terms of screen size, performance, and display limitations. Ennek eredményeképpen a mobilalkalmazások háttérrendszereinek követelményei eltérnek az asztali webes felhasználói felületekéitől.As a result, the requirements for a mobile application backend differ from the desktop web UI.

Ezeknek a különbségeknek köszönhetően a háttérkiszolgálóra egymással versengő követelmények vonatkoznak.These differences result in competing requirements for the backend. A háttérrendszert rendszeresen és jelentős mértékben módosítani szükséges, hogy az asztali webes felhasználói felületet és a mobilalkalmazást egyaránt ki tudja szolgálni.The backend requires regular and significant changes to serve both the desktop web UI and the mobile application. Gyakran külön felületfejlesztő csapatok dolgoznak ez egyes előtérrendszereken, így a háttérrendszer szűk keresztmetszetté válik a fejlesztési folyamatban.Often, separate interface teams work on each frontend, causing the backend to become a bottleneck in the development process. Az egymással ütköző frissítési követelmények és a szolgáltatás mindkét előtérrendszeren való működőképessége iránti elvárások miatt esetleg rengeteg erőfeszítést kell fektetni egyetlen üzembe helyezhető erőforrásra.Conflicting update requirements, and the need to keep the service working for both frontends, can result in spending a lot of effort on a single deployable resource.

A frontendek mintázatának háttér-és problémás diagramja

Ahogy a fejlesztés a háttérszolgáltatásra összpontosít, esetleg egy külön csapat alakul a háttérrendszer kezelésére és karbantartására.As the development activity focuses on the backend service, a separate team may be created to manage and maintain the backend. Ez végül azt eredményezi, hogy megszakad a kapcsolat a felületet és a háttérrendszert fejlesztő csapatok közt, és nő a teher háttérfejlesztő csapaton, hogy megfeleljenek a különböző felületfejlesztő csapatok egymással versengő elvárásainak.Ultimately, this results in a disconnect between the interface and backend development teams, placing a burden on the backend team to balance the competing requirements of the different UI teams. Ha valamelyik felületfejlesztő csapat a háttérrendszer módosítását igényli, a változásokat érvényesíttetni kell a többi felületfejlesztő csapattal is, mielőtt integrálhatóak lennének a háttérrendszerbe.When one interface team requires changes to the backend, those changes must be validated with other interface teams before they can be integrated into the backend.

MegoldásSolution

Felhasználói felületenként egy háttérrendszert hozzon létre.Create one backend per user interface. Az egyes háttérrendszer viselkedésének és teljesítményének finomhangolása az előtér-környezet igényeinek leginkább megfelelő, anélkül, hogy aggódnia kellene a többi előtér-felületre.Fine-tune the behavior and performance of each backend to best match the needs of the frontend environment, without worrying about affecting other frontend experiences.

A frontendek mintázatához tartozó háttérrendszer ábrája

Mivel mindegyik háttérrendszer egy adott felülethez tartozik, optimalizálható is hozzá.Because each backend is specific to one interface, it can be optimized for that interface. Ennek eredményeképpen kisebb, kevésbé összetett és valószínűleg gyorsabb lesz, mint egy olyan általános háttérrendszer lenne, amely az összes felület követelményeinek megpróbál megfelelni.As a result, it will be smaller, less complex, and likely faster than a generic backend that tries to satisfy the requirements for all interfaces. Minden felületfejlesztő csapat autonóm módon meghatározhatja a saját háttérrendszerét, és nem függ a központi háttérrendszer-fejlesztő csapattól.Each interface team has autonomy to control their own backend and doesn't rely on a centralized backend development team. Így a felületfejlesztő csapat rugalmasan határozhatja meg a nyelvválasztást, a kiadási ütemezést, a számítási feladatok prioritását és a háttérrendszerbe integrált szolgáltatásokat.This gives the interface team flexibility in language selection, release cadence, prioritization of workload, and feature integration in their backend.

További információkért lásd: Minta: Háttérrendszerek és előtérrendszerek.For more information, see Pattern: Backends For Frontends.

Problémák és megfontolandó szempontokIssues and considerations

  • Vegye számba, hogy hány háttérrendszert kell telepíteni.Consider how many backends to deploy.
  • Ha a különböző felületek (például a mobilügyfelek) azonos kéréseket adnak majd le, fontolja meg, hogy valóban érdemes-e külön háttérrendszert kialakítani minden egyes felülethez, vagy esetleg elegendő egyetlen háttérrendszer.If different interfaces (such as mobile clients) will make the same requests, consider whether it is necessary to implement a backend for each interface, or if a single backend will suffice.
  • Ennek a mintának az implementálásakor nagyon valószínű, hogy a kód duplikálva lesz az egyes szolgáltatásokban.Code duplication across services is highly likely when implementing this pattern.
  • Az egyes előterekre irányuló háttérrendszereknek csak ügyfélspecifikus logikát és működést szabad tartalmaznia.Frontend-focused backend services should only contain client-specific logic and behavior. Az általános üzleti logikát és az egyéb globális szolgáltatásokat az alkalmazás valamely más részében kell kezelni.General business logic and other global features should be managed elsewhere in your application.
  • Gondolja végig, hogy ennek a mintának az alkalmazása miként módosítja a felelősségi köröket a fejlesztői csapatban.Think about how this pattern might be reflected in the responsibilities of a development team.
  • Vegye számításba, hogy mennyi ideig tart megvalósítani a mintát.Consider how long it will take to implement this pattern. Okoznak majd az új háttérrendszerek kialakításába fektetett erőfeszítések műszaki adósságot, miközben továbbra is támogatja a meglévő általános háttérrendszert?Will the effort of building the new backends incur technical debt, while you continue to support the existing generic backend?

Mikor érdemes ezt a mintát használni?When to use this pattern

Használja ezt a mintát, ha:Use this pattern when:

  • Egy megosztott vagy általános célú háttérszolgáltatást kell fenntartani jelentős fejlesztési többletterhelés mellett.A shared or general purpose backend service must be maintained with significant development overhead.
  • A háttérrendszert a specifikus ügyfélfelületek követelményeihez szeretné optimalizálni.You want to optimize the backend for the requirements of specific client interfaces.
  • Az általános célú háttérrendszer testreszabásával több felületet szeretne kiszolgálni.Customizations are made to a general-purpose backend to accommodate multiple interfaces.
  • Valamely másik felhasználói felület háttérrendszeréhez egy alternatív programnyelv alkalmasabb lenne.An alternative language is better suited for the backend of a different user interface.

Nem érdemes ezt a mintát használni, ha:This pattern may not be suitable:

  • Ha a felületek ugyanazokat vagy hasonló kéréseket intéznek a háttérrendszerhez.When interfaces make the same or similar requests to the backend.
  • Ha csak egyetlen felület kommunikál a háttérrendszerrel.When only one interface is used to interact with the backend.