Я знаю, что в ООП вы хотите, чтобы каждый объект (из класса) был "вещью", например. пользователь, валидатор и т. д.
Я знаю основы MVC, как они взаимодействуют друг с другом.
Однако мне интересно, должны ли модели в MVC разрабатываться в соответствии с традиционным ООП-дизайном, то есть должна ли каждая модель быть базой данных / таблицей / строкой (решение 2)?
Или нам больше нравится собирать методы, которые влияют на одну и ту же таблицу или несколько связанных таблиц (решение 1).
пример модуля адресной книги в CodeIgniter, где я хочу иметь возможность "CRUD" для контакта и добавлять / удалять его в / из группы контактов, способной работать в CRUD.
Модели решения 1: объединение всех связанных методов (не реальный объект, а «пакет»)
class Contacts extends Model {
function create_contact() {)
function read_contact() {}
function update_contact() {}
function delete_contact() {}
function add_contact_to_group() {}
function delete_contact_from_group() {}
function create_group() {}
function read_group() {}
function update_group() {}
function delete_group() {}
}
Модели решения 2: способ ООП (один класс на файл)
class Contact extends Model {
private $name = '';
private $id = '';
function create_contact() {)
function read_contact() {}
function update_contact() {}
function delete_contact() {}
}
class ContactGroup extends Model {
private $name = '';
private $id = '';
function add_contact_to_group() {}
function delete_contact_from_group() {}
function create_group() {}
function read_group() {}
function update_group() {}
function delete_group() {}
}
Я не знаю, как думать, когда я хочу создавать модели. и приведенные выше примеры - мои реальные задачи по созданию адресной книги. Должен ли я просто объединить все функции в одном классе. тогда класс содержит другую логику (контакт и группу), поэтому он не может содержать свойства, специфичные для одного из них.
решение 2 работает по ООП. но я не знаю, почему я должен сделать такое разделение. Каковы преимущества, например, наличие объекта Contact. Это определенно не объект User, так почему Контакт должен «жить» со своим собственным состоянием (свойствами и методами). Потому что я склонен думать так: если что-то нуждается в состоянии, я создаю класс ООП, чтобы методы могли влиять на состояние или другие вещи, основанные на состоянии.
так что модели тоже должны быть "с состоянием"? если они не требуют состояния, почему я должен создать его в соответствии с шаблоном ООП. тогда я мог бы просто собрать все это вместе, как «пакетное» решение.
вы опытные ребята с OOP / MVC, пожалуйста, пролите свет на то, как следует думать здесь, в этой очень конкретной задаче (и вообще при создании модели)
РЕДАКТИРОВАТЬ: думать о контроллерах в MVC. они создаются в соответствии с «пакетным» решением. Это заставляет меня задуматься ...