Middle
Millise põhimõtte alusel liidestes meetodid ühendatakse ja eraldatakse?
sobes.tech AI
Vastus AI-lt
Interfeiside meetodid ühendatakse ja jagunevad vastavalt käitumise sidususe (cohesion) ja selge lepingu põhimõtetele:
- Käitumise sidusus: Meetodid, mis esindavad ühtset operatsioonide kogumit või täidavad sarnaseid tegevusi, ühendatakse üheks liideseks. See parandab koodi loetavust, lihtsustab liidese eesmärgi mõistmist ja suurendab selle taaskasutusvõimalusi.
- Selge leping: Liides kirjeldab selget lepingut, mida peavad täitma selle rakendavad klassid. Iga meetod liideses on osa sellest lepingust. Meetodid jagunevad erinevateks liidesteks, kui nad esindavad erinevaid käitumise aspekte või nende rakendamine võib olla sõltumatu. Näiteks võib
Readableliides sisaldada andmete lugemise meetodeid, samas kuiWritable— kirjutamise meetodeid. Klass võib rakendada ühte või mõlemat neist liidestest sõltuvalt oma võimalustest.
See lähenemine toetab SOLID põhimõtteid, eriti:
- Ühe vastutuse põhimõte (Single Responsibility Principle): Liidesel on üks põhjus muutuda — selle kirjeldatud käitumise kogumi muutmine.
- Liideste eraldamise põhimõte (Interface Segregation Principle): Kliendid ei tohiks sõltuda liidestest, mida nad ei kasuta. Suurte liideste jagamine väiksemateks ja fokusseeritud osadeks võimaldab klassidel rakendada ainult neid liideseid, mida neil tõesti vaja on.
Näide:
Oletame, et meil on objekt, mida saab salvestada ja laadida. Selle asemel, et kasutada ühte Persistable liidest koos kahe meetodiga save() ja load(), on parem luua kaks eraldi:
<?php
// Liides salvestatavate objektide jaoks
interface Savable
{
public function save(): void;
}
<?php
// Liides laaditavate objektide jaoks
interface Loadable
{
public function load(): void;
}
Objekt, mis saab nii salvestada kui laadida, rakendab mõlemat liidest:
<?php
// Klass, mis rakendab mõlemat liidest
class DataObject implements Savable, Loadable
{
public function save(): void
{
// Salvestamise loogika
}
public function load(): void
{
// Laadimise loogika
}
}
Klass, mis ainult salvestub, rakendab ainult Savable:
<?php
// Klass, mis rakendab ainult `Savable`
class TempData implements Savable
{
public function save(): void
{
// Ajutiste andmete salvestamise loogika
}
}
See võimaldab paindlikumat klasside ja nende sõltuvuste projekteerimist.