
Stepan
03.02.2017
10:42:45
Но про ангуляр я вчера картинку вроде находил

Sergey
03.02.2017
10:42:47
тип angular-forlmly

Stepan
03.02.2017
10:43:25
Соната хорошо, если ты во фронтенд вообще не можешь. Но там полный ад с формтайпами, и знать надо дофига

Google

Stepan
03.02.2017
10:44:27
Рест фигануть куда проще, хотя вообще тот же мармелабовский реактовый админ-интерфейс капец как схож по структуре с сонатой. Понятно почему, потому что бизнес-задача одна — CRUD

Sergey
03.02.2017
10:44:50

Sergey
03.02.2017
10:45:04
я сча с angular2 балуюсь

Sergey
03.02.2017
10:45:07
когда люди доктрину юзают в цикле, это ж не доктрина виновата?

Stepan
03.02.2017
10:45:20
Вот для справки https://github.com/marmelab/admin-on-rest

Rodion
03.02.2017
10:45:44
блин, раз есть возможность, то спрошу:
если мы выносим логику из контроллеров, то где хранить доменную логику? я прикинул, что доменные менеджеры под каждую сущность - это перебор, + не всегда ясно, какому менеджеру присваивать метод.
начал копать глубже, вышел на DDD, CQRS и т.п. Туда копать?

Stepan
03.02.2017
10:45:49

Aleksandr
03.02.2017
10:45:52
то есть накатать рест и потом к нему прикрутить админку?

Sergey
03.02.2017
10:45:59

Sergey
03.02.2017
10:46:05

Sergey
03.02.2017
10:46:50
сущности, объекты-значения, сервисы

Stepan
03.02.2017
10:46:52
Ну и рест всё равно делать, это тоже косты

Google

Sergey
03.02.2017
10:47:28

Sergey
03.02.2017
10:47:30

Rodion
03.02.2017
10:47:53

Stepan
03.02.2017
10:47:56
Домена, блин. Предметной области же
Доменная печь)

Sergey
03.02.2017
10:48:24

Sergey
03.02.2017
10:48:39
у всех разное понятие "домена", увы)

Stepan
03.02.2017
10:48:48
Печь предметной области, всё правильно :)

Sergey
03.02.2017
10:49:36
есть вопрос делигирования ответственности
ну мол у тебя есть пачка объектов которые отвечают за маленькие операции/бизнес правила
и тупой менеджер который тупо задает последовательность, флоу
в нем нет if-ов
ну и в сущностях нет геттеров, нет сеттеров
есть только объекты
и операции которые нужно проделать с данными которые хранят объекты
например:
public function changePassword(string $oldPassword, string $newPassword, PasswordEncoder $encoder)
{
if (!$encoder->isValid($this->password, $oldPassword)) {
throw new InvalidPasswordException();
}
$this->password = $encoder->encode($newPassword);
}
один метод вместо какого-то сервиса-менеджера и кучи гетеров сеттеров

Rodion
03.02.2017
10:52:53

Sergey
03.02.2017
10:52:55
вся бизнес операция инкапсулирована

Google

Sergey
03.02.2017
10:53:15
> ок. есть "группа", в ней "аккаунты" с разными "ролями". задача - создать группу.
почитай про такую штуку как "агрегат сущностей"
попробуй нарисовать граф сущностей в твоей бизнес транзакции и кто кому нужен
что бы сделать дела
и кто будет главным
> 3. обе сущности персистятся. затем флаш.
одна сущность добавляется в репозиторий. Флаш в контроллере.

Rodion
03.02.2017
10:54:24
Aggregate is a pattern in Domain-Driven Design. A DDD aggregate is a cluster of domain objects that can be treated as a single unit.
т.е. следует копать про DDD?

Sergey
03.02.2017
10:55:44
но конкретно в этом случае
начни просто с того что подумай
кто в операции главный
может ли группа сама создать аккаунты? какой информации ей не хватает? как собирается граф объектов

Rodion
03.02.2017
10:57:34
1. быстрой мыслью предполагаю, что не может, т.к. при этом в группу придется инжектить фабрику аккаунтов.

Aleksandr
03.02.2017
10:58:32

Rodion
03.02.2017
10:58:40
DDD, так и называется
я так и не дошел до нее пока)
ну Domain-Driven Development

Aleksandr
03.02.2017
10:59:07
я уже книгами обложился ?
когда только читать успевать

Aleh
03.02.2017
10:59:33
Может быть сложновата, есть смысл до нее про solid, GRASP почитать)

Google

Rodion
03.02.2017
10:59:34
есть сокращенная версия: DDD Quickly

Aleksandr
03.02.2017
10:59:50

Rodion
03.02.2017
10:59:57
Ларман)

Aleksandr
03.02.2017
10:59:57
солид в целом представляю как и что
только принцип лисков меня напрягает

Aleh
03.02.2017
11:00:11
Да, вот от infoq можно ddd quickly

Aleksandr
03.02.2017
11:00:14
я его не вкурил толком

Aleh
03.02.2017
11:00:53

Admin
ERROR: S client not available

Aleksandr
03.02.2017
11:01:11
что за дядя боб? )

Rodion
03.02.2017
11:01:17
Clean Code
мб имеет смысл FAQ какой-то сделать)

Aleh
03.02.2017
11:01:32
Robert Martin

Aleksandr
03.02.2017
11:02:57
http://www.williamspublishing.com/Books/978-5-8459-1185-8.html
это?

Rodion
03.02.2017
11:03:18
угу

Sergey
03.02.2017
11:21:05
я аж как-то горд за наших симфонистов. вот сижу уже почти 3 мес в jvm и scala чатиках, за это время ни разу не было упоминаний SOLID, DDD и вообще хоть каких-то вещей из мира ООП. всегда идут какие-то набросы "котлин не нужен", "неосилили скалу", "го гавно", шуточки про пхп и прочий флуд. многие люди там даже не знают кто такой дядюшка боб, фаулер...

Sergey
03.02.2017
11:21:47

Big_Shark
03.02.2017
11:22:57

Sergey
03.02.2017
11:23:18

Google

Sergey
03.02.2017
11:23:23
это чатик по php а я дно

Sergey
03.02.2017
11:23:27
точно так же и в jvm чатике вспомним Баруха, Архипова, Гамова и тд
в твиттере?

Hell
03.02.2017
12:13:35

Sergey
03.02.2017
12:15:24
как кложура
у нее нет имени
потому неймспейс на нее не влияет
а вот если ты создаешь кложуру в контексте какого-то класса - то.... у тебя есть функция в контексте класса (с доступом к приватному состоянию)

Hell
03.02.2017
12:16:07
namespace My\OAuth2\Client\Factory;
class OAuth2 {
public static function getProvidersFactory($providers, $settings) {
}
}
Catchable fatal error: Argument 1 passed to My\OAuth2\Client\Factory\OAuth2::factory() must be an instance of My\OAuth2\Client\Factory\Closure, instance of Closure given, c
private static function factory(Closure $callable)

Sergey
03.02.2017
12:16:39
ты слэшик забыл
\Closure $callable
а еще можешь просто писать
callable $callable

Hell
03.02.2017
12:17:17
callable is better
?

Sergey
03.02.2017
12:17:42
ну больше рарзрешает
вариантов