Sobes.tech
Middle

Milyen elv alapján csoportosítják és választják el a módszereket az interfészekben?

sobes.tech MI

Válasz az MI-től

Az interfészekben lévő metódusokat a viselkedés kohéziója (cohesion) és az egyértelmű szerződés elve szerint csoportosítják és választják szét.

  • Viselkedés kohéziója: Azok a metódusok, amelyek egy egységes műveletkészletet képviselnek egy entitással vagy hasonló cselekvést hajtanak végre, egy interfészbe kerülnek. Ez javítja a kód olvashatóságát, megkönnyíti az interfész céljának megértését és növeli újrafelhasználhatóságát.
  • Egyértelmű szerződés: Az interfész egy nyilvánvaló szerződést ír le, amelyet a megvalósító osztályoknak teljesíteniük kell. Minden metódus az interfészben ennek a szerződésnek a része. A metódusokat különböző interfészek között osztják szét, ha különböző viselkedési aspektusokat képviselnek, vagy ha azok megvalósítása függetlenül változhat. Például, a Readable interfész tartalmazhat metódusokat az adatok olvasására, míg a Writable az írásra. Egy osztály megvalósíthat egy vagy mindkét interfészt a képességei szerint.

Ez a megközelítés támogatja a SOLID elveket, különösen:

  • Egyszeri felelősség elve: Az interfésznek csak egy oka lehet a változásra — a viselkedéskészlet módosítása, amit leír.
  • Interfész szegregáció elve: A kliensek nem függhetnek olyan interfészektől, amelyeket nem használnak. A nagyobb interfészek kisebb, fókuszált interfészekre való bontása lehetővé teszi, hogy az osztályok csak azokat az interfészeket valósítsák meg, amelyekre valóban szükségük van.

Példa:

Tegyük fel, van egy entitásunk, amely menthető és betölthető. Ahelyett, hogy egy Persistable interfész lenne két metódussal save() és load(), jobb, ha két külön interfészt hozunk létre:

// Menthető entitások interfésze
interface Savable
{
    public function save(): void;
}
// Betölthető entitások interfésze
interface Loadable
{
    public function load(): void;
}

Egy menthető és betölthető osztály mindkét interfészt megvalósítja:

// Mindkét interfészt megvalósító osztály
class DataObject implements Savable, Loadable
{
    public function save(): void
    {
        // Mentés logikája
    }

    public function load(): void
    {
        // Betöltés logikája
    }
}

Csak mentésre szoruló osztály csak a Savable-t valósítja meg:

// Csak a `Savable` interfészt megvalósító osztály
class TempData implements Savable
{
    public function save(): void
    {
        // Ideiglenes adatok mentésének logikája
    }
}

Ez lehetővé teszi az osztályok és azok függőségeinek rugalmasabb tervezését.