Модели в разных фреймворках

StalkerClasses

Новичок
Посмотрел - в рахных фреймворках идет по разному описание моделей.


В одних модели выглядят так:

class Model extends ...{
public $id;
public $title;
}

В других моделях так:
class Model extends ...{

}

В первом и втором случае структура таблицы одинаковая.
В каких случаях нужно свойства перечислять как переменные?
 

nllabs

Новичок
В каких случаях нужно свойства перечислять как переменные?
В тех, где это требуется.
Вообще, в идеале, модель нужно стремиться делать как можно более независимой от фреймворка.
 

fixxxer

К.О.
Партнер клуба
В идеале - так:

PHP:
final class SomeModel {
    // ...
}
Но это, конечно, не про Yii или Laravel.

По твоему вопросу - зависит от реализации в конкретном фреймворке. Как в мане написано - так и делать.
 

ksnk

прохожий
Вообще - понятие модели несколько расплывчатое.

Для определенности - давай говорить о модели в смысле MVC.

Наиболее частоизменяемым куском в MVC приложении является View. По очевидным причинам. Так что определять то что нужно модели следует, исходя из потребностей именно вьюшки. Чем более удобной и лаконичной будет моделька - тем проще и удобнее будет работать с ней вьюшке и тем быстрее и дешевле будет изготовление новых вариантов приложения. Где-то в среднепотолочной далекой-далекой галактике...

Итого, чтобы понять какие свойства/методы/магию нужно прикрутить к модельке - достаточно написать несколько вьюшек и попытатся сформулировать АПИ этих моделей, исходя из потребностей слоя view.

А вот модельки доступа к данным это уже отдельная песня, которую абстрактно пропеть значительно сложнее...
 

StalkerClasses

Новичок
В тех, где это требуется.
Вообще, в идеале, модель нужно стремиться делать как можно более независимой от фреймворка.
В идеале - так:

PHP:
final class SomeModel {
    // ...
}
Но это, конечно, не про Yii или Laravel.

По твоему вопросу - зависит от реализации в конкретном фреймворке. Как в мане написано - так и делать.
Просто не совсем пойму, что в принципе дает:
public $id;
public $title;
в модели?

Что в принципе дают setTitle(), getTitle().

В Yii например и без этих переменных есть колонка в базе - значит к ней можно обратился $row->title и все.
 

nllabs

Новичок
Тебе нужно ознакомиться с ООП и паттернами проектирования.
Могу рекомендовать бесплатный курс Дмитрия Елисеева "PSR-7 фреймворк".
Более толкового курса по ООП (именно по ООП, а не по говно-ООП) я не встречал.
Курс не для новичков, будет нелегко.

Дополнение:
В этом курсе, на самом деле, рассматривается написание своего микрофреймворка, а не изучение ООП.
На протяжении курса автор грамотно применяет ООП, объясняя что он делает и почему.
Я на многие вещи стал смотреть по другому.
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Мой поинт в том, что вообще не должно быть обращений к $model->title (если это не read model).
Должно быть $this->title.

getTitle() и setTitle() ничего не меняют - это то же самое нарушение инкапсуляции, только замаскированное.

Понятно, что это не про всякое говно типа Yii AR и Eloquent.
 

ksnk

прохожий
public $id;
public $title;
Такие конструкции возникают в системах, которые инициализируются базой. Тоесть где-то там в админке системы есть формочка, в которой юзеру нужно указать список классов, которые нужно стартовать в каком-то порядке. А если классы инициируются в коде - необходимость $ID для них далеко неочевидна, возникает мысль, что достаточно имени класса.
 
Сверху