[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ActiveRecord
Страницы: 1, 2, 3, 4, 5, 6
twin
Цитата (Santehnick @ 22.03.2018 - 17:20)
twin, там не звездочка. Там все свойства объекта конвертируются в поля для селекта и только они выбираются. Если полю в таблице не найдено соответствия среди свойств объекта оно не будет выбираться.
К сожалению это не так. Потому я и взбеленился. По крайней мере в документации явно указано:

Цитата
Как сказано выше, получаемые из базы данные заполняют объекты Active Record и каждая строка результата запроса соответствует одному объекту Active Record. Вы можете получить доступ к значениям столбцов с помощью атрибутов этих объектов. Например так:
// "id" и "email" - названия столбцов в таблице "customer"
$customer = Customer::findOne(123);
$id = $customer->id;
$email = $customer->email;



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

Цитата (Santehnick @ 22.03.2018 - 17:20)
Существует DAO если требуется работать с данными, зачем для этого использовать AR если это история про доменную модель, а не про данные. Сейчас это выглядит как попытка принести на кухню рот человека, чтобы перекусить, а всё остальное тело оставить лежать на диване. Если такое требуется, так не используй ооп, используй данные, dao и процедуры. Не нужно пытаться из объектов делать данные.

Это как раз понятно. Понятно и другое, что в доменной модели, заказав пицу на дом, к тебе приедет не курьер, а вся пекарня, вместе с продуктовым складом.

Цитата (Santehnick @ 22.03.2018 - 17:20)
И ты как-то очень странно делишь веб и не веб.
Может я тут и не верно разграничиваю, но суть проста. Если программа работает долго, на одного пользователя, это одна история. Если она работает дискретно и на многих - другая.

В десктопе можно позволить себе притащить всю пиццерию к себе домой. Потому что пользователь один. В веб придется не просто притаскивать её каждому посетителю, но и утаскивать обратно, как только он откусит кусочек.

Вот я про что.

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

Хотя по сути это другая песня, не касаемая AR.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Michael
Цитата (Santehnick @ 22.03.2018 - 15:46)
twin, так смысл AR объектов в том, что они составляют доменную модель. Если поведение, которое должно принадлежать объекту вываливается за его пределы, то получается анемичная модель. Фреймворки на которые ты ссылаешься так и предлагают делать. Для них AR это не объект доменной модели, а бессмысленный аналог строки в таблице. В итоге бизнес-логику на этих фреймворках 95% пишут прямо в контроллере, еще 5% делают тоже самое в каких-нибудь сервисах. В итоге получается transaction script через active record. Какое извращение user posted image

Они не понимают зачем. Они так делают, только потому что так написано в документации по ларавель.

Эти вещи изначально плохо объяснены и люди не знают как делать.
Фаулер говорит о том чтобы в AR классах реализовать бизнес логику.
А например Роберт Мартин в своем "чистом коде", против этого:
Цитата
Активные записи (Active Records) составляют особую разновидность DTO. Они
тоже представляют собой структуры данных с открытыми переменными (или пе-
ременными с bean-доступом), но обычно в них присутствуют навигационные ме-
тоды — такие, как save или find. Активные записи чаще всего являются результа-
тами прямого преобразования таблиц баз данных или других источников данных.
К сожалению, разработчики часто пытаются интерпретировать такие структуры
данных, как объекты, и включают в них методы, реализующие бизнес-логику.

Однако такой подход нежелателен, так как он создает гибрид между структурой
данных и объектом.


В таких фреймворках как Yii (c рельсовой архитектурой), традиционно AR объекты рассматриваются как основная часть M в MVC, и поэтому AR классы содержат все от M и становятся сильно жирными.
Многие ооп-шники считают что это все неправильное программирование, не ооп, не солид.
И вот некоторые пытаются AR как то по другому, по солид-ному, использовать, понимая ее например как только строчку таблицы. Т.е. не только функционал форм и валидации выкинуть, а любую логику. Но в yii это очень редкое явление пока. И проблема в том что непонятно как тогда программировать, разве что как ты выше упомянул про логику в контроллерах, но это совсем не то.

_____________
There never was a struggle in the soul of a good man that was not hard
twin
Цитата (Michael @ 23.03.2018 - 08:24)
И вот некоторые пытаются AR как то по другому, по солид-ному, использовать, понимая ее например как только строчку таблицы. Т.е. не только функционал форм и валидации выкинуть, а любую логику.

Это называется "анемичная модель". Кстати, далеко не всеми принимается за антипаттерн. Многие наоборот считают это, и только это верным направлением. Вот и дядя Боб оказывается их почитатель. smile.gif

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Michael
Цитата (twin @ 23.03.2018 - 10:30)
Цитата (Michael @ 23.03.2018 - 08:24)
И вот некоторые пытаются AR как то по другому, по солид-ному, использовать, понимая ее например как только строчку таблицы. Т.е. не только функционал форм и валидации выкинуть, а любую логику.

Это называется "анемичная модель". Кстати, далеко не всеми принимается за антипаттерн. Многие наоборот считают что это, и только это верное направление. Вот и дядяБоб оказывается их почитателем. smile.gif

Да в таком использовании она даже и моделью не является, а просто какой то сервисный объект на инфраструктурном уровне, позволяющий не писать sql код.

_____________
There never was a struggle in the soul of a good man that was not hard
twin
Цитата (Michael @ 23.03.2018 - 08:33)
Да в таком использовании она даже и моделью не является, а просто какой то сервисный объект на инфраструктурном уровне, позволяющий не писать sql код.
Ну вот так... Что ж поделать.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
Цитата (Michael @ 23.03.2018 - 12:24)
В таких фреймворках как Yii (c рельсовой архитектурой), традиционно AR объекты рассматриваются как основная часть M в MVC, и поэтому AR классы содержат все от M и становятся сильно жирными.
Многие ооп-шники считают что это все неправильное программирование, не ооп, не солид.

В этом по сути не так много проблем. Проблема в магии, которой много.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
А они говорили не изоборетай велосипед...
Он давно изобретен... говорили они...

Слушайте и внимайте,
Свернутый текст
бестолочи. biggrin.gif


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
upd. я просто хочу, чтоб не не зря. Это только начало smile.gif

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
Все было хорошо, пока не дошел до этого

$users = User::find()->where(['like', 'login', '%Karl%'])
->
andWhere(['in', 'id', [2, 4, 6]])
->
all();

моя реакция

https://www.youtube.com/watch?v=P-3GOo_nWoc

я всякое дерьмо видел, но это дерьмо, самое дерьмовое дерьмо из всех дермищь. Это не только выглядит как очередная магическая хрень, но и имеет непредсказуемое API

'like', 'login', '%Karl%', что уж тогда не так 'like', '%Karl%', 'login', или так %Karl%', 'login', 'like'. Зачем придумывать там где ничего придумывать не надо, сделать 'login', 'like', '%Karl%'.

['username', 'isnotnull']
[
'password', 'equal', 'guest'],
[
'username', 'isnull']
[
'id', 'in', [2, 4, 6]]


Чем такой вариант не устраивает, он же очевиден

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Michael
Цитата (chee @ 24.03.2018 - 01:26)
я всякое дерьмо видел, но это дерьмо, самое дерьмовое дерьмо из всех дермищь. Это не только выглядит как очередная магическая хрень, но и имеет непредсказуемое API

Это он сделал как в Yii :lol:
Ну там смысл что идет оператор, а за ним уже операнды, которых может, в общем случае, быть >2 , например для 'and'. Для унификации.
В phpUnit похожий подход:
assertGreaterThan(mixed $expected, mixed $actual[, string $message = ''])



_____________
There never was a struggle in the soul of a good man that was not hard
twin
Цитата (chee @ 23.03.2018 - 23:26)
Чем такой вариант не устраивает, он же очевиден
У меня тоже был такой же вопрос. Но я свой фреймворк позиционирую как учебный, соответственно стараюсь по возможности придерживаться стиля мейнстримных фреймворков. Так что этот вопрос к Yii2. smile.gif Так уж исторически сложилось, я подглядывал к ним.

Хотя LARAVEL использует другой синтаксис, как ты написал. Надо подумать на эту тему.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Цитата (Michael @ 24.03.2018 - 05:25)
Ну там смысл что идет оператор, а за ним уже операнды, которых может, в общем случае, быть >2 , например для 'and'. Для унификации.

Именно так.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Michael
Цитата (Santehnick @ 23.03.2018 - 18:45)
Я когда писал на yii делал из AR полноценные доменные объекты. И это верно если хочется готовить ООП на yii, а не процедурную лапшу.

А ты когда логику домена в AR делал, интуитивно решал проблемы или может где толковые объяснения(книги) встречал? Фаулер же по сути там вообще ничего не объясняет, пару страниц теории.
Плюс фреймы добавляют своей специфики.
Например ты удивился что можно во фреймах выбирать "неполные" AR объекты.
Но например в yii можно и
- сохранять не все - $model->save(true, ['field1', 'field2'])
- накидывать св-ву модели чистый sql код - $model->timestamp = new \yii\db\Expression('NOW()');
Да и помимо 2-ух ответственностей там еще их пяток... :
user posted image

_____________
There never was a struggle in the soul of a good man that was not hard
twin
Ну что я могу сказать. Очень увлекательная задачка была. Много чего узнал нового, одно то, что никто не пишет ООП код чего стоило. smile.gif

В общем и целом основу я написал. Писал снуля, все на собственных идеях. Так что ничего похожего на Yii или Laravel в коде почти нет. Синиаксис и правила брал у обоих, какие больше нравились.

Конечно, там есть не все, но для малых и средних сайтов вполне достаточно. Чего не хватит - будем расширять и дополнять.

Кому не лень, посмотрите, где я чего накосячил. И чего упустил.
Вот тут дока
Вот тут оно на гитхабе.

Каску надел, зеленки купил, гипс размочил. Пинайте. smile.gif

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Цитата (Santehnick @ 29.03.2018 - 01:10)
он будет искать архитектурные решения применительно к PHP. Не найдет. Тем более на русском. Вакуум.

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

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

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

Цитата (Santehnick @ 24.03.2018 - 15:13)
у Вернона в Implementing domain driven design. От AR осталось только умение объектов самосохраняться.
А как же связи? Когда я писал AR, мне показалось это самым главным...

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.