
Sergey
08.07.2018
13:01:19
сценааарий!

Bohdan
08.07.2018
13:01:23
если дословно "один из случаев использования приложения юзером"
потому пробую другими словами

Google

Sergey
08.07.2018
13:02:38
единственное тогда не понимаю фразу: "Это может быть сервис уровня приложения (знаешь же что такое юзкейс? ну вот что-то типа обработчик юзкейсов). может быть еще чего... короч ничего конкретного. "

Sergey
08.07.2018
13:03:50

Sergey
08.07.2018
13:04:25
полностью? от перехода на страницу регистрации?

Sergey
08.07.2018
13:04:36
ты ж сам приводил цитату - без технических подробностей
вот чел хочет зарегаться, как этот процесс будет происходить с его точки зрения?

Sergey
08.07.2018
13:05:35
тыкает харегистрироваться, вводит данные, тыкает кнопку, процесс завершен. в некоторых системах еще нужно получить письмо на почту и ткнуть ссылку там

Artem
08.07.2018
13:05:41
Пишу app service, который создаёт пользователя, если его ещё нет и одновременно создаёт блогпост. При этом необходимо, чтобы service вернул созданный пост.
Как написал я в сервисе:
$user->createPost($request->get('post'), $request->get('header'), $request->get('ip'));
А вот сам метод в юзере:
public function createPost(string $post, string $header, string $ip)
{
$this->posts[] = (new Post($post, $header, new IpAddress($ip)))->setUser($this);
}
Полагая, что создание поста - это ответственность юзера. Но тогда у меня нет ссылки на пост, чтобы вернуть его из сервиса. Можно создавать пост в сервисе, но это вроде как не его ответственность. Можно возвращать пост из createPost, но это получается двойное назначение метода createPost. В общем посоветуйте, что делать? =\

Sergey
08.07.2018
13:07:34

Sergey
08.07.2018
13:08:02
выглядит как бизнес логика
набор правил для обработки

Sergey
08.07.2018
13:08:43
выглядит как бизнес логика
бизнес логика - очень широкий термин. Как и логика в целом. Ты сейчас более узкий термин пытаешься приравнять к более широкому, как следствие размывается смысл. В итоге получается каша

Sergey
08.07.2018
13:09:22
ок то есть то, что я ранее определял как бизнес логику - есть юзкейс

Sergey
08.07.2018
13:09:35
....

Google

Sergey
08.07.2018
13:09:37
нет
бизнес логика - это логика которая интересна бизнесу
юзкейс интересен бизнесу, что делает его частью бизнес логики. Дальше вопрос разделения. Юзкейс - это наиболее обобщенное описание того как должна работать система. На самом высоком уровне.
есть например - спецификации. Это тоже бизнес логика но на очень низком уровне

Shmaltorhbooks
08.07.2018
13:11:44
Юзкейс - что делает пользователь. Регистрируется, пишет посты, читает статистику.
Бизнес логика - что делает система под капотом, чтоб юзер мог все это делать. При регистрации юзера бизнес-логика может статистику пересчитать, уведомить админа, отметить его как временно RO и ещё кучу всего, что юзер не знает
Но при регистрации юзер не знает ни о какой статистике и знать ему ненадо, что она вообще есть

Sergey
08.07.2018
13:12:33
о так понятнее

Shmaltorhbooks
08.07.2018
13:12:42
И об админах он ничего не знает

Sergey
08.07.2018
13:12:45
так вот - сервис уровня приложения - это ни что иное как реализация этого сценария:
class UserRegistrationUseCase
{
private $users;
private $notifications;
public function handle(RegisterUser $data)
{
$user = User::awaitingConfirmation($data->name, $data->email, new Password($data->password);
$this->users->add($user);
$this->notifications->send(new EmailConfirmation($data->email, $user->confirmationLink());
}
}

Shmaltorhbooks
08.07.2018
13:12:53
Может, какие-то баллы ему начисляются
Юзкейс может быть многошаговый
Написание поста, например, с пре-модерацией

Sergey
08.07.2018
13:13:37

Shmaltorhbooks
08.07.2018
13:13:47
Не суть)
Ты человека излишним количеством деталей путаешь)

Sergey
08.07.2018
13:14:26
так теперь наконец понял что та фраза значила

Shmaltorhbooks
08.07.2018
13:14:27
А ему на пальцах разница между юзкейсом и БЛ нужна)

Sergey
08.07.2018
13:14:29
Написание поста, например, с пре-модерацией
ну это просто два юзкейса. Один - написание поста. Второй - возможность заапрувить пост. Еще надо будет возможность посмотреть список постов на апрув. Как часть второго юзкейса можно сделать пункт типа отправить нотификашку автору поста
процесс один - юзкейсов много

Shmaltorhbooks
08.07.2018
13:15:02

Google

Sergey
08.07.2018
13:15:42
хм... ок, тогда я не понимаю в чем проблема ADR, domain - слой который занимается подготовкой данных, да это довольно широкое понятие, но его конкретизация - не цель ADR

Shmaltorhbooks
08.07.2018
13:16:01
А бизнес логика - какие шаги нужно сделать самой системе, чтоб юзер мог делать то, что ему нужно и на этом шаге и вообще


Sergey
08.07.2018
13:17:42
Пишу app service, который создаёт пользователя, если его ещё нет и одновременно создаёт блогпост. При этом необходимо, чтобы service вернул созданный пост.
Как написал я в сервисе:
$user->createPost($request->get('post'), $request->get('header'), $request->get('ip'));
А вот сам метод в юзере:
public function createPost(string $post, string $header, string $ip)
{
$this->posts[] = (new Post($post, $header, new IpAddress($ip)))->setUser($this);
}
Полагая, что создание поста - это ответственность юзера. Но тогда у меня нет ссылки на пост, чтобы вернуть его из сервиса. Можно создавать пост в сервисе, но это вроде как не его ответственность. Можно возвращать пост из createPost, но это получается двойное назначение метода createPost. В общем посоветуйте, что делать? =\
это не двойное назначение, ты можешь возвращать Post из метода createPost. Единственное что это будет нарушение CQS, но типа... иногда можно)
Пишу app service, который создаёт пользователя, если его ещё нет и одновременно создаёт блогпост. При этом необходимо, чтобы service вернул созданный пост.
Как написал я в сервисе:
$user->createPost($request->get('post'), $request->get('header'), $request->get('ip'));
А вот сам метод в юзере:
public function createPost(string $post, string $header, string $ip)
{
$this->posts[] = (new Post($post, $header, new IpAddress($ip)))->setUser($this);
}
Полагая, что создание поста - это ответственность юзера. Но тогда у меня нет ссылки на пост, чтобы вернуть его из сервиса. Можно создавать пост в сервисе, но это вроде как не его ответственность. Можно возвращать пост из createPost, но это получается двойное назначение метода createPost. В общем посоветуйте, что делать? =\
один из вариантов как избежать необходимости в методах которые что-то пишут возвращать чего-то - это передавать айдишку поста скажем в параметры метода. Тогда у тебя как бы снаружи все будет известно и ты сможешь сгенерить ссылку и т.д. Если юзаешь mysql - то тут только UUIDv4, если postgresql - есть еще секвенсы


Sergey
08.07.2018
13:18:38
та же что и у MVC разделить данные и их подготовку к отправке
сделать код читаемым и тестируемым

Sergey
08.07.2018
13:19:16

q3ta
08.07.2018
13:19:36
как называется функция что присваивает элементы массива переменным ?

Shmaltorhbooks
08.07.2018
13:20:08
export, list

Sergey
08.07.2018
13:20:13
если не становится - это проблема с неправильным использованием микроскопа для забивания гвоздей

Shmaltorhbooks
08.07.2018
13:20:18
list не функция, но не суть

q3ta
08.07.2018
13:20:43

Shmaltorhbooks
08.07.2018
13:21:07
Google => array to variables

Sergey
08.07.2018
13:21:15

q3ta
08.07.2018
13:22:07

Artem
08.07.2018
13:22:18

Sergey
08.07.2018
13:22:53

Sergey
08.07.2018
13:23:06
в аналогии - да

Google

Sergey
08.07.2018
13:23:34
кстати есть разница одна
в ADR responder не может обратиться в домен за данными

Sergey
08.07.2018
13:24:38
в ADR responder не может обратиться в домен за данными
как ты данные предоставляешь респондеру? вот вернемся с задаче выше - отображение списка заказа + связанные данные. Расскажи как бы ты это писал, с использованием чего и т.д. То есть в реальности (я ж не знаю с какими фреймворками/либами ты работаешь)

Artem
08.07.2018
13:27:20
hateoas вот это вот всё

Sergey
08.07.2018
13:28:17
в объекте Payload? соответственно 4 списка(массива)
в сценарии надо вчера я бы подгрузил в домен этой страницы или что это будет 4 домена, повытаскивал с них эти данные и упаковал в 1 payload. хотя мне это вообще не нравится

Sergey
08.07.2018
13:30:14

Admin
ERROR: S client not available

Sergey
08.07.2018
13:32:56
ну то есть какие объекты какого типа будут за это отвечать, кто от кого зависит и т.д
детали продукта тоже могут быть в другой базе

Sergey
08.07.2018
13:37:34
какая разница?
домен пользователей тащит оттуда откуда должен тянуть
домен страницы естественно будет от всех 4х зависить
но так как мы ждем все это то иначе и быть не может
уточню: детали пользователей это все их данные или еще есть?

Sergey
08.07.2018
13:40:47
если ты уже сказал "все их данные"

Google

Sergey
08.07.2018
13:41:32
так все или еще какие то есть в другом месте?

Sergey
08.07.2018
13:41:33
этого "домена страницы"

Artem
08.07.2018
13:43:10

Sergey
08.07.2018
13:44:08
ну мол что бы разделить ответственность

Artem
08.07.2018
13:45:02
типа Author будет сохранять, а User читать?

Sergey
08.07.2018
13:45:35

Sergey
08.07.2018
13:46:30
construct($orderDomain, $orderItemsDomain, $itemsDomain, $customerDomain), в методе getAll тащим при наличии заказов все заказы, по заказам все позиции заказа, айтемы, пользователей пакуем в payload

Artem
08.07.2018
13:46:42
забей
я попробую на эту тему подумать, спасибо

q3ta
08.07.2018
13:46:57
а есть ли какая-то система ошибок, типа логов, но сортирующий ошибки по разным файлам зависимо от файлов, в которых происходит ошибка? конечно можно и самому сделать, но вдруг есть

Sergey
08.07.2018
13:47:39
10 заказов, у каждого 2 позиции, 10 разных покупателей.
или лучше не 10 а 100
что бы было посущественнее

Sergey
08.07.2018
13:49:23
если нужна подобная оптимизация - достаточно одного домена например OrdersWithFullDetailsDomain
из базы тащим все с использованием JOIN и подобных конструкций одним запросом, из API если позволяет тянем всех пользователей и компонуем с вытянутым из базы
таким образом у такого домена будут зависимости PDO обьект с линком на базу и обьект общения с API CRM

Sergey
08.07.2018
13:54:33
то есть если я захочу добавить что-то в инфу о продукте (мы ж массивчики возвращаем) мне надо будет уже в двух местах править.
теперь добавляем реалий. Нам надо поменять статус заказа и вернуть его детали (вот все то же что выше, только один заказ а не список)

Sergey
08.07.2018
13:55:59
зачем? если тянуть из базы не через * то да в 2х местах