Sobes.tech
Middle

Podle jakého principu jsou metody v rozhraních seskupovány a oddělovány?

sobes.tech AI

Odpověď od AI

Metody v rozhraních jsou seskupeny a odděleny podle principu koherence chování a principu jasné smlouvy.

  • Koherence chování: Metody, které představují soubor operací s entitou nebo vykonávají podobné akce, jsou seskupeny do jednoho rozhraní. To zlepšuje čitelnost kódu, usnadňuje pochopení účelu rozhraní a zvyšuje jeho znovupoužitelnost.
  • Jasná smlouva: Rozhraní popisuje jasnou smlouvu, kterou musí plnit třídy, jež ji implementují. Každá metoda v rozhraní je součástí této smlouvy. Metody jsou rozděleny mezi různá rozhraní, pokud představují různé aspekty chování nebo pokud jejich implementace může být nezávisle odlišná. Například rozhraní Readable může obsahovat metody pro čtení dat, a Writable pro zápis. Třída může implementovat jedno nebo obě rozhraní podle svých schopností.

Tento přístup podporuje principy SOLID, zejména:

  • Princip jediné odpovědnosti: Rozhraní má jediný důvod ke změně — změna souboru chování, které popisuje.
  • Princip segregace rozhraní: Klienti by neměli záviset na rozhraních, která nepoužívají. Rozdělení velkých rozhraní na menší a zaměřená umožňuje třídám implementovat pouze ta rozhraní, která skutečně potřebují.

Příklad:

Předpokládejme, že máme entitu, kterou lze uložit a načíst. Místo jednoho rozhraní Persistable s dvěma metodami save() a load(), je lepší vytvořit dvě samostatná rozhraní:

// Rozhraní pro uložitelnou entitu
interface Savable
{
    public function save(): void;
}
// Rozhraní pro načitelnou entitu
interface Loadable
{
    public function load(): void;
}

Třída, která může být uložena a načtena, implementuje obě rozhraní:

// Třída implementující obě rozhraní
class DataObject implements Savable, Loadable
{
    public function save(): void
    {
        // Logika uložení
    }

    public function load(): void
    {
        // Logika načtení
    }
}

Třída, která je pouze uložena, implementuje pouze Savable:

// Třída implementující pouze rozhraní Savable
class TempData implements Savable
{
    public function save(): void
    {
        // Logika dočasného uložení dat
    }
}

Toto umožňuje flexibilnější návrh tříd a jejich závislostí.