Middle
რომელ პრინციპზეა დაფუძნებული მეთოდების გაერთიანება და განცალკევება ინტერფეისებში?
sobes.tech AI
პასუხი AI-სგან
ინტერფეისებში მეთოდები ერთიანდებიან და ნაწილდებიან მოწყობის კოესივობის (cohesion) და საზღვრების აშკარადობის პრინციპების მიხედვით:
- მოწყობის კოესივობა: მეთოდები, რომლებიც წარმოადგენენ ერთიან ოპერაციების ნაკრებს ან ასრულებენ მსგავს მოქმედებებს, ერთ ინტერფეისში ერთიანდებიან. ეს აუმჯობესებს კოდის წაკითხვადობას, ხელს უწყობს ინტერფეისის დანიშნულების გაგებას და ზრდის მის გადამეორებადობას.
- საზღვრების აშკარადობა: ინტერფეისი აღწერს აშკარად კონტრაქტს, რომელიც უნდა შეასრულონ მასზე რეალიზებულმა კლასებმა. თითოეული მეთოდი ინტერფეისში არის ამ კონტრაქტის ნაწილი. მეთოდები ნაწილებად იყოფიან სხვადასხვა ინტერფეისებში, თუ ისინი წარმოადგენენ სხვადასხვა ქცევის ასპექტებს ან მათი რეალიზაცია შეიძლება იყოს დამოუკიდებელი. მაგალითად,
Readableინტერფეისი შეიძლება შეიცავდეს მონაცემების წაკითხვის მეთოდებს, ხოლოWritable— დაწერის. კლასი შეიძლება რეალიზებდეს ერთ ან ორივე ამ ინტერფეისს, დამოკიდებულია შესაძლებლობებზე.
ეს მიდგომა უწყობს ხელს SOLID პრინციპებს, განსაკუთრებით:
- ერთგული პასუხისმგებლობის პრინციპი (Single Responsibility Principle): ინტერფეისი აქვს ერთი მიზეზი ცვლილებისთვის — ცვლილება იმ ქცევების ნაკრებში, რომელიც ის აღწერს.
- ინტერფეისების განყოფილების პრინციპი (Interface Segregation Principle): მომხმარებლები არ უნდა იყვნენ დამოკიდებული იმ ინტერფეისებზე, რომლებიც მათ არ იყენებენ. დიდ ინტერფეისებს პატარა და ფოკუსირებულ ნაწილებად დაყოფა საშუალებას აძლევს კლასებს რეალიზირონ მხოლოდ ის ინტერფეისები, რომლებიც მათ ნამდვილად სჭირდებათ.
მაგალითი:
Suppose we have an entity that can be saved and loaded. Instead of one Persistable interface with two methods save() and load(), it is better to create two separate interfaces:
<?php
// ინტერფეისი შენახვად სუბიექტებისთვის
interface Savable
{
public function save(): void;
}
<?php
// ინტერფეისი ჩატვირთვად სუბიექტებისთვის
interface Loadable
{
public function load(): void;
}
A class that can be both saved and loaded implements both interfaces:
<?php
// კლასი, რომელიც რეალიზებს ორივე ინტერფეისს
class DataObject implements Savable, Loadable
{
public function save(): void
{
// შენახვის ლოგიკა
}
public function load(): void
{
// ჩატვირთვის ლოგიკა
}
}
A class that only needs to be saved implements only Savable:
<?php
// კლასი, რომელიც რეალიზებს მხოლოდ `Savable`
class TempData implements Savable
{
public function save(): void
{
// დროებითი მონაცემების შენახვის ლოგიკა
}
}
ეს საშუალებას აძლევს უფრო მოქნილი კლასების და დამოკიდებულებების პროექტირებას.