gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Правильно ли я понимаю паттерн модели из MVC?

Модель состоит из классов трех уровней

Первый уровень - уровень источника данных (база данных, или трехмерный массив) - имеет методы "получить данные из источника в оперативку (например файл скачать с удаленного сервака на локальный)" - пример из жизни - прайс-лист поставщика

Второй уровень - уровень таблицы, двумерного массива-коллекции - имеет методы "добавить строку, удалить строку, изменить строку, получить строку по номеру" - пример из жизни - лист экселя из прайслиста например с продуктами, таким образом - таблица "продукты"

Третий уровень - уровень строки таблицы, одномерного массива - врядли имеет какие-то методы, скорее представляет собой обьект, который имеет строго определенный набор свойств, и автоматически проверяет эти свойства при их изменении и устанавливает дефолты при инициализации, имеет полный набор колонок и уникальный набор колонок. Уникальный для того, чтобы была возможность высчитать его хеш для последующего обьединения с элементами, полученными из базы

Просто что-то оно у меня не складывается, так-то модель моделью что "получение данных, бизнес-логика и тд" - но сколько слов не используй - это должно реализовано быть как-то, вот не понимаю ничерта

Мне кажется что я слишком усложнил или наоборот упростил.
Вот если представить модель в виде трех уровней - вопросов конечно меньше, но опять же - зачем мне допустим писать класс для поставщика и расписывать все сущности исходных данных, если в рамках приложения моя задача преобразовывать, а не знать, как оно хранится, и разумнее наверное создать класс который называется примерно так
SupplierToDb1Class {} таким образом создавая не обьекты и коллекции, а классы ответственные за преобразование из одного источника в другой?

Или может для собственной базы данных нужны как раз обьекты и коллекции, чтобы легче было их обьединять, а для каждого из удаленных источников нужны как раз такие классы-посредники? В общем ниче не понимаю
  • Вопрос задан
  • 831 просмотр
Решения вопроса 2
arutyunov
@arutyunov
Mooza.ru — Делаем сайты
Рекомендую посмотреть кусок выступления Дмитрия Науменко из команды Юи2: https://youtu.be/WL0-bd2Afho?t=5m55s

Там он как раз говорит о разнице между моделью во фреймворке и моделью из МВС.
Ответ написан
Decadal
@Decadal
Зачем вы включаете базу данных в понимание модели? База данных это то, куда сохраняются данные. А модель - это то, как выглядят (или что представляют из себя) эти данные.
В Yii2, например, есть класс Model, который может быть вообще не связан с БД, он содержит набор полей, набор правил валидаций, и... всё-таки остаётся моделью! Очень хорошо будет вам попробовать реализацию MVC на конкретном примере, в конкретном фреймворке и увидеть, что для чего там используется, чтобы не путаться (или пускай даже путаться, но не стопориться в разработке и развитии).
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
IvanCher
@IvanCher
Мысли шире
Вы представляете себе, что Модель это что-то конкретное, но на деле это просто абстрактный слой и Вы сами решаете какие классы в него входят, а какие нет. На деле в модели содержится ВСЁ, что связано с данными и бизнес-логикой над ними. Далее идет уже реализация, которая может быть очень и очень разной. Например, есть шаблоны проектирования ORM DataMapper и ActiveRecord. Они чуть ли не противоположно разные в реализации, но они обе модели. При этом есть более низкоуровневые архитектуры, например Domain Driven Development и Data Driven Development. В обоих случаях уровень Модели может быть размазан на несколько слоёв приложения.
Я сейчас работаю в проекте с Domain Driven и там модель размазывается просто на кучу слоёв приложения. Как она будет размазана завист от того, какие слои для своего приложения Вы сами определили изначально.
И Ваше утверждение, что большинство фреймворщиков ничего не понимают в этом - полная глупость. Фреймворк Симфони - это просто эталон академичности проектирования в пхп. На его основе Ларавель - тоже достаточно грамотный фреймворк. Есть еще Yii, которые пошли другим путем, но тоже очень четко разделяют внутри модель MVC, хотя и дают много возможности наговнокодить и всё смешать в кучу.
Тут скорее Вы не понимаете, что модель - это не что-то конкретное, а лишь один из 3х компонентов, из парадигмы mvc, ответственный за хранение и изменение состояния данных. Реализаций может быть столько сколько существует программистов и даже больше.
Еще более неопределенное - это то, как взаимодействуют эти 3 компонента из MVC между собой. Они могут на основе событийной модели взаимодействовать, или явно вызывая друг друга, и еще огромным числом разных способов.
Касательно Вашего примера, то Вы описали слой хранения данных, переходящий в модель. Моделью, в Вашем случае, является 3ий уровень - строка таблицы(ну может и таблица тоже). 1ый уровень у Вас - это уровень, который должен синхронизировать модель с хранилищем данных. Причем таких "синхронизаторов" может быть несколько и хранилища могут быть очень разными. Например ORM и ODM. Они будут проэцировать и синхронизировать модели с хранилищями данных, но по сути к моделям они не относятся, хотя если нам нужно их всё же определить только в рамках MVC, то это конечно же будет моделью. Но в mvc есть много вещей, которые не относятся ни к одному из этих 3х компонентов, а являются связующими звеньями этих компонентов, например те же ORM, ODM, валидаторы(иногда их в модель зашивают, хотя они могут использоваться и во вне), роутинг, событийные компоненты, логер и прочее-прочее.
Ответ написан
Rou1997
@Rou1997
Модель состоит из классов трех уровней

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

Модель - это один класс, который представляет одну из строк таблицы базы данных, сам класс (вернее, объект класса) это текущая строка, поля класса это ячейки данной строки.
Все остальное зависит от конкретного фреймворка.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы