Komposition Ydinperiaatteet
Pyyhkäise näyttääksesi valikon
Kokoonpano keskittyy monimutkaisten olioiden rakentamiseen yhdistämällä yksinkertaisempia, itsenäisiä komponentteja. Perinnän sijaan, joka luo jäykkiä hierarkioita, kokoonpano mahdollistaa luokkien yhteistyön sisäkkäisten olioiden kautta. Tämä lähestymistapa tekee järjestelmistä joustavampia, modulaarisempia ja helpommin ylläpidettäviä, koska komponentteja voidaan vaihtaa tai laajentaa rikkomatta koko rakennetta.
123456789101112131415161718192021222324252627282930313233class Payment: def pay(self, amount): return f"Paid {amount}" class Inventory: def reserve(self, item): return f"{item} reserved" class Shipping: def ship(self, item): return f"{item} shipped" class Order: def __init__(self, item, price, payment, inventory, shipping): self.item = item self.price = price self.payment = payment self.inventory = inventory self.shipping = shipping def process(self): return " | ".join([ self.inventory.reserve(self.item), self.payment.pay(self.price), self.shipping.ship(self.item) ]) order = Order("Laptop", 1200, Payment(), Inventory(), Shipping()) print(order.process())
Order ei toteuta maksun, varaston tai toimituksen logiikkaa itse.
Sen sijaan sillä on erilliset oliot (Payment, Inventory, Shipping), joita se käyttää työnsä suorittamiseen.
Jokaisella komponentilla on yksi vastuualue, ja Order ainoastaan koordinoi niitä.
Jos haluat muuttaa maksun tai toimituksen toimintaa, voit vaihtaa komponentin ilman, että Order-luokkaa tarvitsee muokata.
Muutamia sudenkuoppia kokoonpanoa käytettäessä ovat jumalaolioiden luominen, jotka keräävät liikaa komponentteja ja muuttuvat vaikeasti hallittaviksi, komponenttien rajapintojen vuotaminen ulomman luokan kautta sen sijaan, että pidettäisiin selkeä rajapinta, sekä piilotetun kytkennän syntyminen, kun komponentit ovat liian riippuvaisia toistensa sisäisistä yksityiskohdista.
God-olio yrittää tehdä liikaa. Se sisältää monia komponentteja ja hoitaa useita vastuita, mikä tekee luokasta vaikeasti ymmärrettävän, testattavan ja ylläpidettävän.
Tämä tapahtuu, kun ulompi luokka paljastaa komponenttiensa sisäiset metodit tai attribuutit. Sen sijaan, että se tarjoaisi oman selkeän rajapintansa, se pakottaa käyttäjät vuorovaikuttamaan sisäisten olioiden kanssa suoraan.
Komponentit kytkeytyvät tiiviisti toisiinsa sisäisten yksityiskohtien kautta. Yhden osan muuttaminen rikkoo odottamatta toisen, koska ne ovat riippuvaisia toistensa sisäisestä rakenteesta selkeiden sopimusten sijaan.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme