Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 18.10.2016 13:31:51

Проектирование предметной области.

Добрый день, господа. Заранее прошу не бить, только начал погружаться в ООП. В данный момент читаю книжку "PHP. Объекты, шаблоны и методики программирования", разбираюсь с принципами ООП, дошел до паттернов. Также параллельно затронул тему MVC, а конкретнее практическое применения в фреймворке Laravel. И у меня возник вопрос. Как и где в разрезе MVC проектировать предметную область, я имею ввиду описание интерфейсов, иерархии классов, связей между ними? Где должна быть описана бизнес-логика? Пока только по мануалам я вижу модель, которая, по-моему, представляет только обертку для работы с БД. Допустим, я хочу описать какой-то абстрактный класс или интерфейс - что я должен сделать? Заранее спасибо и прошу прощения, если где-то выражаюсь некорректно, только учусь. Помогите, пожалуйста, разобраться и встать на путь истинный.

Изменено NuclearNinja (18.10.2016 13:33:35)

Не в сети

#2 18.10.2016 14:13:21

Re: Проектирование предметной области.

Маленькие "пять капель".
MVC, по-сути, к предметной области, как к таковой, никакого отношения не имеет, это парадигма программирования. С ней, или без нее, задачи решаются.
Насколько я понимаю, "в разрезе" ничего специально проектировать не нужно, начать следует с описания процессов предметной области.
Есть, к примеру, какой-нибудь ее фрагмент, для рассмотрения? Самый простой процесс?
Можно было бы прикинуть.
А уж когда дойдет дело до кода, то вовсе не обязательно использовать весь спектр PHP ООП. Ну, к чему, например, объявлять абстрактный класс, если задача тривиальна а пишете на фреймворке? :-) Там "все украдено до нас" :-)

Не в сети

#3 18.10.2016 17:28:34

Re: Проектирование предметной области.

Androbim пишет:

Маленькие "пять капель".
MVC, по-сути, к предметной области, как к таковой, никакого отношения не имеет, это парадигма программирования. С ней, или без нее, задачи решаются.
Насколько я понимаю, "в разрезе" ничего специально проектировать не нужно, начать следует с описания процессов предметной области.
Есть, к примеру, какой-нибудь ее фрагмент, для рассмотрения? Самый простой процесс?
Можно было бы прикинуть.
А уж когда дойдет дело до кода, то вовсе не обязательно использовать весь спектр PHP ООП. Ну, к чему, например, объявлять абстрактный класс, если задача тривиальна а пишете на фреймворке? :-) Там "все украдено до нас" :-)

Спасибо за ответ. Постараюсь в общих чертах объяснить, что я хочу понять. Приведу небольшой фрагмент предметной области. Есть некий отдел продажи запчастей(ЗЧ) для автомобилей. Есть сама сущность ЗЧ, обзовем ее Part, заказы от клиентов - Orders. Существует множество складов предприятия на которых эти ЗЧ хранятся. Чтобы запросить ЗЧ со склада у нас есть документ - Запрос на склад(RequestToStock). Если на данном складе требуемых ЗЧ не оказалось, то мы создаем документ - Перемещение(Transfer).  На данном этапе можно пока остановиться. И RequestToStock и Transfer являются документами, содержащими перечень ЗЧ, т.е. напрашивается описать для них общий интерфейс. Создаем абстрактный Document, в котором определяем абстрактные методы - getPartList(получить перечень ЗЧ в документе), addPart(добавить ЗЧ в документ), close(Закрыть документ) и т.д. Подскажите, пожалуйста, как реализовать данную задачу в рамках Laravel. Или я чего-то не понимаю?

Не в сети

#4 18.10.2016 17:42:50

Re: Проектирование предметной области.

Тогда углубляться не надо пока, иначе придется прорабатывать возникшие вопросы.
А если совсем упростить, то.
Есть запчасти, которые хранятся на складах, так? Нужно сгенерировать запрос, есть ли эта запчасть на конкретном складе, так? Ну, или вообще, где она есть, не важно. Если есть, чего-то там сделать, если нет - сгенерировать документ-перемещение, так?

Не в сети

#5 18.10.2016 22:12:53

Re: Проектирование предметной области.

Давайте пока отойдем от этой конкретной задачи и прибегнем к классическим примерам. Допустим у нас есть сайт, где мы присутствует новостная лента. На ней мы должны выводит публикации 3 типов - новости, статьи и объявления. В чем-то они схожи - у них есть заголовок и текст, в чем-то различаются - у статей есть авторы, а у новостей источники. По примеру многих мануалов, мы должны создать следующие модели - News, Article, Announcement, верно? Но мы хотим работать с этими публикациями через один интерфейс. Для этого мы создаем абстрактный класс Publications, в котором описываем абстрактные методы. Как нам это сделать в данном случае? Вот линк откуда взят пример - https://habrahabr.ru/post/37576/

Не в сети

#6 19.10.2016 06:30:50

Re: Проектирование предметной области.

Ну, зачем огород городить? :-)
Думаю, обсуждать "мы хотим работать с этими публикациями через один интерфейс", смысла нет. Лично я, наоборот, хотел бы работать с ними в разных интерфейсах, ведь новости - это новости, статьи - статьи, а объявления - это объявления. Ну, есть у них одинаковые атрибуты, и что? :-)
Короче, спорный вопрос.
Как я бы предложил сделать.
Сначала про данные.
В Laravel модели наследуются от класса Model, в котором уже весь базовый функционал присутствует - удаление, обновление, создание, и ничего своего здесь особо придумывать не нужно. Каждому объекту этого класса в БД соответствует одна таблица. Поэтому, я так понимаю, делать один общий класс для всех трех сущностей имеет смысл только в том случае, если Вы хотите работать с одной и той же моделью. Смотрите сами, я бы не стал. Сделал бы три отдельных класса, с присущими им свойствами. А иерархия классов, про которую Вы пишете, считаю, лишняя. В Laravel это не нужно.
Далее нужно будет сделать вывод новостной ленты - это контроллер и представление. Вот в контроллере-то Вы и пропишете получение данных из всех трех моделей, а результат, там же, передадите представлению. Техника описана в документации и статьях, например,  Все об отношениях в Laravel 5
Я бы сделал так. Конечно, могу ошибаться, потому что сам в этой теме недавно.
Считаю, что по вопросу высказался.

Изменено Androbim (19.10.2016 06:32:07)

Не в сети

#7 19.10.2016 09:28:13

Re: Проектирование предметной области.

Вооот. Именно этот момент мне и непонятен. Я полностью понимаю все, что вы пишете. Ну а как же использование такого замечательного принципа, как полиморфизм. Если типов публикаций будет не 3, а 103. Для вывода всех публикаций на одной странице нам нужно будет написать 103 строки кода? Опять же, хочу напомнить, что я привожу элементарный пример с целью понять общий смысл. То есть получается, что от проектирования все сводится к кодингу методов модели?

Не в сети

#8 19.10.2016 11:01:06

Re: Проектирование предметной области.

Да много есть замечательных принципов. По своему, глубоко личному, опыту могу сказать, что практически невозможно, вот так вот, сходу, действовать оптимально, особенно, если знаний еще только предстоит набираться. Это всего касается. Ну и какой смысл в префекционизме? Перед Вами вполне конкретная задача, ну и почему бы не начать решать, зачем подстраиваться под какие-то принципы?
На laravel.su есть документация - там два быстрых старта, для начинающих и продвинутых. Если прочли Мэтта Зандстру, то для продвинутых должен быть понятен. Там, по-сути, весь цикл разработки представлен. Ссылку на статью про отношения я Вам дал.
Извините, но больше не имею возможности на данную тему дискутировать.

Не в сети

#9 20.10.2016 13:06:01

Re: Проектирование предметной области.

Спасибо за уделенное мне время.

Не в сети

#10 20.10.2016 13:09:05

Re: Проектирование предметной области.

Господа, ладно спрошу в лоб. Как в Laravel реализовать простой пример, приведенный в этой статье https://habrahabr.ru/post/37576/ ? Наш базовый класс Publication мы должны наследовать от Model? Говоря в общем, мы должны строить свою иерархию классов, наследуя наши супер-классы от Model? Или мы делаем отдельную иерархию? Заранее спасибо.

Не в сети

#11 20.10.2016 15:42:49

stuchin
Откуда: Волгоград
Сообщений: 68

Re: Проектирование предметной области.

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

Не в сети

#12 20.10.2016 17:03:02

Re: Проектирование предметной области.

stuchin пишет:

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

Спасибо большое за совет. И какими же надеждами я себя тешу, поясните? Разобраться в том, что мне непонятно на данный момент? Для чего тогда вообще нужен форум? Если вы не читали сообщения, то объясню специально для вас, что у меня нет конкретной задачи, и я не прошу кого-то что-то сделать за меня, а интересует общий подход. Я, по-моему, вполне адекватно изложил мысль, и не пойму вашей реакции.

Не в сети

#13 21.10.2016 12:17:48

stuchin
Откуда: Волгоград
Сообщений: 68

Re: Проектирование предметной области.

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

Не в сети

#14 21.10.2016 17:26:06

Re: Проектирование предметной области.

Так я привел пример по ссылке https://habrahabr.ru/post/37576/. Он там даже с кодом. Я понимаю, что проектирование обширная тема, и не прошу научить меня проектировать либо спроектировать что-то за меня. Я хочу на таком простом примере уловить суть, ибо мануалы и документация не дают мне ответ на вопрос, т.к. везде банальные примеры, сущность-модель, сущность-модель. Буду рад даже, если направление дадите.

Не в сети

#15 21.10.2016 23:40:07

stuchin
Откуда: Волгоград
Сообщений: 68

Re: Проектирование предметной области.

в примере не код
а так фигня
такие сложные методы разумно использовать в реально сложных задачах
и то не факт
на любителя

Не в сети

Подвал раздела