Sobes.tech
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, Readable sąsaja gali turėti duomenų skaitymo metodus, o Writable — 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ą.