Найден 3121 результат

slavcodev
2016.10.12, 17:27
Форум: Архитектура, дизайн, ООП
Тема: Specification pattern
Ответы: 69
Просмотры: 18818

Re: Specification pattern

Если я правильно понял, то что zelenin предложил , не является на самом деле QueryObject, думаю просто название не верное выбрал, какой-нибудь PostSpecification наверное бы меньше путаницы бы внес. Хотя я по прежнему думаю такой билдер выносить за переделы имплементации доменной модели, не очень удо...
slavcodev
2016.10.11, 15:41
Форум: Архитектура, дизайн, ООП
Тема: Specification pattern
Ответы: 69
Просмотры: 18818

Re: Specification pattern

Если я правильно понял первый, то все это "выбор постов с фильтром по свойствам", это один метод репозитория, который проверит что фильтр верный и может быть использован, подготовит запрос и выберет посты из БД.
slavcodev
2016.10.11, 15:27
Форум: Архитектура, дизайн, ООП
Тема: Specification pattern
Ответы: 69
Просмотры: 18818

Re: Specification pattern

Идея - в передаче в репозиторий QueryObject (на основе UL) и поиска на его основе. Идея может быть интересной (ну может не Query Builder) это должно называться. Возможно, такая абстракция была бы интересной и удобной. Выглядеть это может примерно вот так: $query = (new PostQuery)     ->nameEqual('Н...
slavcodev
2016.10.11, 15:19
Форум: Архитектура, дизайн, ООП
Тема: Specification pattern
Ответы: 69
Просмотры: 18818

Re: Specification pattern

Понимаешь, в данной теме мы уже не про теорию, а про практику, в которой в методе как минимум должна быть пагинация. Не зная бизнес условий, вряд ли можно говорить о точном решении, но если условие будет что в домене нужна пагинация для результата поиска, то будет что-то вроде public function getSe...
slavcodev
2016.10.11, 15:10
Форум: Архитектура, дизайн, ООП
Тема: Specification pattern
Ответы: 69
Просмотры: 18818

Re: Specification pattern

Остальные два (сейчас посмотрел) тоже не имеет ничего общего с DDD, а являются врапперами над SQL (Like, Equals и тд). Разбрасывание бизнес логикой, а это как раз и есть бизнес логика как выбирается та или иная группа сущностей $specification = new CollectionSpecification([         new PageCondition...
slavcodev
2016.10.11, 15:05
Форум: Архитектура, дизайн, ООП
Тема: Specification pattern
Ответы: 69
Просмотры: 18818

Re: uery

zelenin писал(а):я специально привел три варианта реализации, чтобы показать как можно более удобно реализовать обертку над спекой с UL.
Я обсуждаю только вариант с билдером, он никак не относится к UL имхо.
slavcodev
2016.10.11, 15:03
Форум: Архитектура, дизайн, ООП
Тема: Specification pattern
Ответы: 69
Просмотры: 18818

Re: Specification pattern

И еще, вот написал ты в N сервисах билдер типа этого class MyService {   public function handle()   {     $query = new QueryBuilder();     $query->page(2, 15)       ->equal(['status' => Post::STATUS_PUBLISHED])       ->sign(['date' , '>', '2015-01-01'])       ->like(['name' , 'отпуск']);     $posts ...
slavcodev
2016.10.11, 14:57
Форум: Архитектура, дизайн, ООП
Тема: Specification pattern
Ответы: 69
Просмотры: 18818

uery

так я и не говорю куда-то выносить фильтрацию/группировку. Если у нас в домене есть Repository+QueryObject, то реализация репозитория должна понимать этот QueryObject, преобразуя в свой нативный язык (sql ли это будет либо http-запросы к апи). Использование QueryBuilder, имхо, уходит далеко за пред...
slavcodev
2016.10.11, 14:45
Форум: Архитектура, дизайн, ООП
Тема: Specification pattern
Ответы: 69
Просмотры: 18818

Re: Specification pattern

Да именно похожее решение я эксперементально интегрирую сейчас в два баундед контекста, один CRUD другой CQRS, посмотрим во что это превратится :D.
slavcodev
2016.10.11, 14:36
Форум: Архитектура, дизайн, ООП
Тема: Specification pattern
Ответы: 69
Просмотры: 18818

Re: Specification pattern

плюс через 2-3 года разработки репозитории могут раздуться до 50 методов, поддерживающих различные типа выборок. Спецификация поможет сохранить чистоту. Чем плохи репозитории с 50 методов? Все хранится в одном классе, чей смысл это как список сущностей? Очень даже хорошо получается все контролирова...
slavcodev
2016.10.11, 14:33
Форум: Архитектура, дизайн, ООП
Тема: Specification pattern
Ответы: 69
Просмотры: 18818

Re: Specification pattern

И того же мнения. Спецификации, как фильтры сущностей, удобны, избавляют от кучи foreach, в боготом логикой домене. А вот генерация SQL в спецификациях, может быть интересна только как какой-то повторяющий код. Так что Double Dispatch мне не нравится, и я экспериментирую с другим решением.
slavcodev
2016.10.11, 12:52
Форум: Архитектура, дизайн, ООП
Тема: Specification pattern
Ответы: 69
Просмотры: 18818

Re: Specification pattern

Обратите внимание что Спецификация это часть домена, это часть Ubiquitous Language. Так что варианты типа Query Buidler не очень подходят ->page(2, 15) ->equal(['status' => Post::STATUS_PUBLISHED]) ->sign(['date' , '>', '2015-01-01']) ->like(['name' , 'отпуск']);   не очень хороший пример имхо. Когд...
slavcodev
2016.10.10, 11:20
Форум: Архитектура, дизайн, ООП
Тема: DDD архитектура
Ответы: 116
Просмотры: 37660

Re: DDD архитектура

zelenin писал(а):все верно, но вероятно, что на самом деле здесь не бизнес требования, а требования традиционных паттернов создания crud.
RESTful приложения тоже перенаправляют на созданную сущность а не на коллекцию.
slavcodev
2016.10.07, 14:24
Форум: Архитектура, дизайн, ООП
Тема: DDD архитектура
Ответы: 116
Просмотры: 37660

Re: DDD архитектура

Даже если мы сгенерим id и добавим его в команду, которую кинем в шину, а потом сделаем редирект на view/$id, то не факт, что найдем там страницу, а не 404, т.к. реализация шины возможно/вероятно асинхронна, и запись еще не создана, или не синхронизирована из write-хранилища в read-хранилища. Ну ес...
slavcodev
2016.10.05, 15:12
Форум: Архитектура, дизайн, ООП
Тема: DDD архитектура
Ответы: 116
Просмотры: 37660

Re: DDD архитектура

class ThreadRepository {   public function findThread($id)   {       return $this->build($this->query("SELECT * FROM threads WHERE id = :id", ['id' => $id]));   }      private function build($threadData)   {     return new Thread($threadData['title'], $threadData['body'], $threadData['aut...
slavcodev
2016.09.29, 22:12
Форум: Архитектура, дизайн, ООП
Тема: DDD архитектура
Ответы: 116
Просмотры: 37660

Re: DDD архитектура

Нарушает типизацию и семантику. И сами методы с или ... или ... только усложняются кучами if-ов. Сделайте два отдельных метода: save(Item $item) и saveAll(array $items). Могу посоветовать использовать Variadic functions в этому случае, очень smart получается, даже мощь type-hinting получаем public ...
slavcodev
2016.08.12, 20:21
Форум: Архитектура, дизайн, ООП
Тема: Использование сервиса в форме в валидации
Ответы: 19
Просмотры: 8215

Re: Использование сервиса в форме в валидации

ElisDN писал(а):Кстати да, клиентская валидация в формах может дублировать, но никак не заменяет валидацию внутри ядра. Клиентскую можно и не производить, если не нужно сразу поля по Ajax подсвечивать.
Поосторожнее с дублями правил, их несогласованность может привести клиента в ступор :D
slavcodev
2016.08.12, 18:59
Форум: Архитектура, дизайн, ООП
Тема: Использование сервиса в форме в валидации
Ответы: 19
Просмотры: 8215

Re: Использование сервиса в форме в валидации

Вынос ограничений сущности из сущности нарушение инкапсуляции. Если вы думаете, просто введя конвенцию в команде, что устанавливать надо в сущность только валидные данные проверенные до этого, и получите не убиваемый код, то вы сильно ошибаетесь. А еще больше ошибается ваш работодатель. После вас пр...
slavcodev
2016.08.11, 01:14
Форум: Общие вопросы по программированию
Тема: Опрос: Какую цветовую тему PhpStorm (и других IDE/редакторов) вы используете?
Ответы: 21
Просмотры: 7239

Re: Опрос: Какую цветовую тему PhpStorm (и других IDE/редакторов) вы используете?

girmate писал(а):И что там за странные значки типа не тождественно равно, квадраты и так далее.
Изврат на тему ===, !==, [] :mrgreen: