Middle
По kom principu se metode u interfejsima grupišu i razdvajaju?
sobes.tech АИ
Одговор од АИ
Методе у интерфејсима се обједињују и деле по принципу повезаности понашања (cohesion) и принципу јасне контрактности.
- Повезаност понашања: Методи који представљају јединствен скуп операција са ентитетом или извршавају сличне по смислу акције, се обједињују у један интерфејс. Ово побољшава читљивост кода, олакшава разумевање намењености интерфејса и повећава његову поновну употребљивост.
- Јасна контрактност: Интерфејс описује јасан контракт који морају испуњавати реализујући га класе. Свакојметод у интерфејсу је део тог контракта. Методи се деле између различитих интерфејса ако представљају различите аспекте понашања или ако њихова реализација може варирати независно. На пример, интерфејс
Readableможе садржати методе за читање података, аWritable— за запис. Клас може реализовати један или оба ова интерфејса у зависности од својих могућности.
Овај приступ доприноси принципима SOLID, посебно:
- Принцип једноставне одговорности (Single Responsibility Principle): Интерфејс има један разлог за промену — промену скупа понашања које описује.
- Принцип сегрегације интерфејса (Interface Segregation Principle): Клијенти не треба да зависе од интерфејса које не користе. Раздвајање великих интерфејса на мање и фокусиране омогућава класе да реализују само оне интерфејсе који им стварно требају.
Пример:
Претпоставимо да имамо ентитет који може бити сачуван и учитан. Уместо једног интерфејса Persistable са два метода save() и load(), боље је створити два одвојена:
<?php
// Интерфејс за ентитете који се могу сачувати
interface Savable
{
public function save(): void;
}
<?php
// Интерфејс за ентитете који се могу учитати
interface Loadable
{
public function load(): void;
}
Клас који може и да се чува и да се учита реализује оба интерфејса:
<?php
// Клас који реализује оба интерфејса
class DataObject implements Savable, Loadable
{
public function save(): void
{
// Логика чувања
}
public function load(): void
{
// Логика учитавања
}
}
Клас који се само чува реализује само Savable:
<?php
// Клас који реализује само интерфејс Savable
class TempData implements Savable
{
public function save(): void
{
// Логика за чување привремених података
}
}
Ово омогућава флексибилније пројектовање класа и њихових зависности.