Middle
Pagal kokį principą metodai yra sujungiami ir atskiriami sąsajose?
sobes.tech AI
Atsakymas iš AI
Sąsajos metodai jungiasi ir skirstomi pagal elgesio sujungimą (cohesion) ir aiškią sutartį principus:
- Elgesio sujungimas: Metodai, kurie sudaro vieningą operacijų rinkinį su objektu arba atlieka panašius veiksmus, jungiasi į vieną sąsają. Tai pagerina kodo skaitomumą, palengvina sąsajos paskirties supratimą ir padidina jos pakartotinį naudojimą.
- Aiški sutartis: Sąsaja apibrėžia aiškią sutartį, kurią turi vykdyti ją įgyvendinančios klasės. Kiekvienas metodas sąsajoje yra šios sutarties dalis. Metodai skirstomi į skirtingas sąsajas, jei jie atstovauja skirtingus elgesio aspektus arba jų įgyvendinimas gali būti nepriklausomas. Pavyzdžiui,
Readablesąsaja gali turėti duomenų skaitymo metodus, oWritable— rašymo. Klasė gali įgyvendinti vieną arba abi šias sąsajas priklausomai nuo galimybių.
Šis požiūris prisideda prie SOLID principų, ypač:
- Vienos atsakomybės principas (Single Responsibility Principle): Sąsaja turi vieną priežastį keistis — keisti elgesio rinkinį, kurį ji apibrėžia.
- Sąsajų atskyrimo principas (Interface Segregation Principle): Klientai neturėtų priklausyti nuo sąsajų, kurių jie nenaudoja. Didelių sąsajų skaidymas į mažesnes ir sutelktas leidžia klasėms įgyvendinti tik tas sąsajas, kurios jiems tikrai reikalingos.
Pavyzdys:
Tarkime, turime objektą, kuris gali būti išsaugotas ir įkeltas. Vietoj vieno Persistable sąsajos su dviem metodais save() ir load(), geriau sukurti dvi atskiras:
<?php
// Sąsaja išsaugoti objektus
interface Savable
{
public function save(): void;
}
<?php
// Sąsaja įkelti objektus
interface Loadable
{
public function load(): void;
}
Objektas, kuris gali būti ir išsaugotas, ir įkeltas, įgyvendina abi sąsajas:
<?php
// Klasė, įgyvendinanti abi sąsajas
class DataObject implements Savable, Loadable
{
public function save(): void
{
// Išsaugojimo logika
}
public function load(): void
{
// Įkėlimo logika
}
}
Objektas, kuris tik išsaugomas, įgyvendina tik Savable:
<?php
// Klasė, įgyvendinanti tik `Savable`
class TempData implements Savable
{
public function save(): void
{
// Laikinosios duomenų išsaugojimo logika
}
}
Tai leidžia lankstesnį klasių ir jų priklausomybių projektavimą.