Kjerneprinsipper for komposisjon
Sveip for å vise menyen
Komposisjon fokuserer på å bygge komplekse objekter ved å kombinere enklere, uavhengige komponenter. I stedet for å basere seg på arv, som skaper rigide hierarkier, lar komposisjon klasser samarbeide gjennom inneholdte objekter. Denne tilnærmingen gjør systemer mer fleksible, modulære og enklere å vedlikeholde, siden komponenter kan byttes ut eller utvides uten å ødelegge hele strukturen.
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 implementerer ikke selv logikken for betaling, lager eller frakt.
I stedet har den separate objekter (Payment, Inventory, Shipping) og bruker dem for å utføre arbeidet sitt.
Hver komponent har ett ansvar, og Order koordinerer dem kun.
Hvis du ønsker å endre hvordan betaling eller frakt fungerer, kan du bytte ut komponenten uten å endre Order-klassen.
Noen fallgruver å være oppmerksom på ved bruk av komposisjon er å lage gud-objekter som samler for mange komponenter og blir vanskelige å håndtere, lekke komponent-API-er gjennom den ytre klassen i stedet for å holde et rent grensesnitt, og å introdusere skjult kobling når komponenter blir for avhengige av hverandres interne detaljer.
Et god-objekt prøver å gjøre for mye. Det inneholder mange komponenter og håndterer mange ansvarsområder, noe som gjør klassen vanskelig å forstå, teste og vedlikeholde.
Dette skjer når den ytre klassen eksponerer de interne metodene eller attributtene til komponentene sine. I stedet for å tilby et eget ryddig grensesnitt, tvinger den brukerne til å samhandle direkte med interne objekter.
Komponenter blir tett koblet sammen gjennom interne detaljer. Endringer i én del fører uventet til feil i en annen fordi de er avhengige av hverandres interne struktur i stedet for tydelige kontrakter.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår