Middle
Kādam principam balstās metožu apvienošana un atdalīšana saskarnēs?
sobes.tech AI
Atbilde no AI
Interfeisa metodes tiek apvienojamos, tiek skirstomos pagal uzsisenėjimo (cohesion) ir aiškios sutarties principus:
- Užsisenėjimo: 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ą.