Teknologian jakaminen

Suunnittelumallien tutkiminen: Vastuumallin ketju

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Mikä on vastuuketjumalli?

vastuuketjumalli (Chain of Responsibility Pattern) on käyttäytymismalli. Määritelmä on seuraava:

  • Vältä pyynnön lähettäjän ja vastaanottajan yhdistämistä ja anna useille objekteille mahdollisuus käsitellä pyyntö.
  • Yhdistä pyynnön vastaanottavat objektit ketjuun ja välitä pyyntö tätä ketjua pitkin, kunnes objekti pystyy käsittelemään sen.
    Lisää kuvan kuvaus tähän

2. Vastuuketjumallin rooli

  • Irrota pyynnöt ja pyyntöjen käsittely parantaaksesi koodin skaalautuvuutta.

3. Vastuuketjumallin rakenne

Lisää kuvan kuvaus tähän

Vastuuketjumalli sisältää pääasiassa seuraavat roolit:

  • Abstrakti käsittelijän rooli: Määritä käyttöliittymä pyyntöjen käsittelyä varten, mukaan lukien abstraktit käsittelymenetelmät ja myöhempi yhteys (jokaisella ketjun käsittelijällä on jäsenmuuttuja, joka tallentaa viittauksen seuraavaan käsittelijään).
  • Betoninkäsittelijän rooli: Toteuta abstraktin prosessorin käsittelymenetelmä sen määrittämiseksi, voidaanko pyyntö käsitellä. Jos pyyntö voidaan käsitellä, käsittele se, muuten pyyntö siirretään seuraajalleen.
  • Asiakkaan rooli: Luo käsittelyketju ja lähetä pyyntö tietylle käsittelijäobjektille ketjun kärjessä. Se ei välitä käsittelyn yksityiskohdista ja pyynnön toimitusprosessista.

Varsinaisessa kehityksessä vastuullisuusketjumalliin voidaan lisätä vastuullisuusketjun johtaja ohjaamaan tiettyjä prosessoreita.

4. Vastuuketjumallin soveltaminen varsinaisessa kehittämisessä

SpringBootissa on monia tapoja harjoitella vastuun ketjua. Seuraava on esimerkki: tilausprosessin moninkertainen riippumaton tarkistuslogiikka.
Lisää kuvan kuvaus tähän

4.1 Toteutustapa 1
  1. Luo Pojo, tilaa objekti
public class OrderContext {
    private String seqId;
    private String userId;
    private Long skuId;
    private Integer amount;
    private String userAddressId;
    // Getters and setters
}