October 8, 2021
Инкапсуляция
Посмотрим на два примера кода одного класса:
class PostStorage {
public function save($id, $title, $author, $body)
{
// ...
}
}class PostStorage {
public function save(Post $post): Post
{
// ...
}
}На первый взгляд разница может показаться несущественной. Но код живет своей жизнью, пользователи требуют новых функций и к постам в блоге добавляется какое-то количество новых полей.
class PostStorage {
public function save($id, $title, $author, $preview, $body, $createdAt, $updatedAt, $category)
{
// ...
}
}class PostStorage {
public function save(Post $post): Post
{
// ...
}
}Хозяйке на заметку: S или SRP первый принцип из SOLID говорит о необходимости ограничивать область ответственности сущностей (функций, классов, модулей, компонентов) всего одной целью.
При изменении структуры данных, возникает необходимость менять код, который никак не связан с этой структорой и вообще служит другой цели — сохранить запись в хранилище. Вместе с изменением метода, потребуется внести изменения во все места, которые использовали наш метод. Чем больше проект, тем больше таких мест, тем дольше вносятся самые простые правки.
Второй вариант не меняется, потому что класс Post инкапсулирует данные и позволяет не менять инфраструктурный слой хранения, при изменениях в модели.
class Post {
public ?string $id;
public string $title;
public string $author;
public string $preview;
public string $body;
public Datetime $createdAt;
public Datetime $updatedAt;
public ?string $category;
}October 8, 2021, 21:09
0 views
4 reactions
0 replies
0 reposts