
Юрий
10.10.2016
12:25:50
Там я не смог увеличить

Anatoliy
10.10.2016
12:28:32
Блин, вот как посмотреть стикеры перед отправкой?

Евгений
10.10.2016
12:28:57
жмешь и держишь
в вебверсии это не работает, говорят

Google

Anatoliy
10.10.2016
12:34:30

Alex
10.10.2016
12:34:54
таки да, в вебе не работает

Denis
10.10.2016
13:18:59
Если бы вы увидели такой класс, что бы вы подумали? :)
object Behavior {
type In[Command[_], State, Response] = (Command[Response], State)
type Out[Event, Response] = (Seq[Event], Response)
}
case class Behavior[Command[_], State, Event](
aggregateName: String,
eventTag: EventTag[Event],
identityExtractor: Command[_] => String,
commandHandler: Behavior.In[Command, State, ?] ~> Behavior.Out[Event, ?],
initialState: State,
eventProjector: (State, Event) => State
)

Vladimir
10.10.2016
13:19:30
пахнет как Akka.typed
типа "ты мне команду вот такую, а я тебе ответ определенного типа"

Denis
10.10.2016
13:20:41
Близко, но насколько я знаю в Akka Typed еще не решили как будет выглядеть akka-persistence :)

Igor
10.10.2016
13:21:36
Ну неплохой основной класс для описания бихейвиоров)

Vladimir
10.10.2016
13:22:00
мне, если честно, больше нравилась идея за TypedActors, с Akka Typed я толком пока не разобрался. То есть понятно, почему они решили отойти от typed actors, но выглядит пока страшновато, как мне кажется

Igor
10.10.2016
13:22:08
ООП-шникам может взрывать голову такой код ))
Видно опыт хаскеля у писателя

Mikhail
10.10.2016
13:23:29
я бы подумал, что вижу перед собой непродуманную, плохо спроектированную хрень)
начиная с такой мелочи как непоследовательность упоминания типов

Denis
10.10.2016
13:23:58
Mikhail продолжай )

Google

Mikhail
10.10.2016
13:24:02
Command[_], State, Response - в то время, как следом идет упоминание их в другом порядке
понятно, что на вход я получаю тупл из команды, которая на выходе выдает респонс(видимо) и какой-то стейт
и тут уже непоняточка - как Command связан со State ?

Denis
10.10.2016
13:24:59
Mikhail тут больше с точки зрения каррирования конструктора такой порядок
Command валидируется относительно State

Mikhail
10.10.2016
13:26:01
на выходе у меня помимо респонза отданного (я так думаю) командом - добавляется Event - и вот вобще непонятно, почему он никак больше ни с чем не связан, да и зачем мне их целая авоська этих ивентов

Denis
10.10.2016
13:26:27
Одна комманда может породить несколько событий

Mikhail
10.10.2016
13:26:35
по указанному списку баундов - этого всего не скажешь, а значит надо обязательно читать "философию из доков" с какой стати это сделано именно так

Denis
10.10.2016
13:27:04
а если сказать что это в контексте eventsourcing?

Mikhail
10.10.2016
13:27:09
и вот если еще и доков нет обьясняющих почему сделано именно так, а просто в них говорят - типа сделайте вот так и на выходе получите вот это - тогда совсем биде будет)
так команда порождает респонз на выходе или все таки события?
моя совсем запуталась

Denis
10.10.2016
13:27:49
и то и другое :)

Mikhail
10.10.2016
13:27:56
или респонз это выход команды, а ивент фоновая побочка команды?

Denis
10.10.2016
13:28:01
да
эффект на стейт

Mikhail
10.10.2016
13:28:11
но тогда не очень понятно, почему команд не связан баундом с ивентом
Command[Event, Response]
тогда связь была бы более очевидна

Denis
10.10.2016
13:28:37
потому что event это внутрення кухня стейта

Google

Denis
10.10.2016
13:29:03
После запуска этого поведения на выходе ты получаешь Command ~> Future

Mikhail
10.10.2016
13:29:26
но ведь если порождает команд, то он должен знать тип ивента как ни крути) значит это будет захардкожено - в том время как это могло бы стать баундом и давать больше информации человеку который с этим работает

Denis
10.10.2016
13:29:26
Command это считай Free DSL

Mikhail
10.10.2016
13:30:13
вот об этом я и говорю, что приведенный кусок вызывает больше вопросов, чем дает ответов
и значит без наличия документации которая обьясняет причины (и не факт что в итоге это все окажется таки продуманным) - будет бидэ

Denis
10.10.2016
13:31:00
значит это будет захардкожено - это вынесено в типа поведения
у тебя есть аггрегат, стейт (State) которого пересодзается из событий (Event)
Но я не спорю ни в коем случае ) наоборот, критика - это супер

Alex
10.10.2016
13:33:09
подумал бы что тут Луковая Архитектура

Denis
10.10.2016
13:33:44
кстати это только у меня многострочный текст перестал бэктиками форматироваться?

Alex
10.10.2016
13:34:01
вообще это ж только кусок алгебры, чтобы врубиться, неплохо бы увидеть всё целиком с интерпретаторами

Mikhail
10.10.2016
13:34:12
так и я не спорю, просто высказываю свое имхо))) я прекрасно понимаю как могут обстоять дела на самом деле, но исключительно потому что я перелопатил тонны абсолютно разного кода на разных языках и есть определенный опыт. но любой код я стараюсь рассматривать с позиции пусть не новичка, но хорошего программиста который в библиотеках конкретного вида имеет мало опыта и когда код является говорящим в достаточной мере, чтобы не лезть во внутренности каждой функции и класса - это очень облегчает работу с кодом

Alex
10.10.2016
13:34:32
не то чтобы я напрашивался их увидеть, просто такое замечание :D

Mikhail
10.10.2016
13:34:33
даже со своим после того как пару лет оно где-то поработает)

Alex
10.10.2016
13:35:40
в целом по типам кстати напоминает frp-шный foldp

Mikhail
10.10.2016
13:35:57
а еще неплохо когда для классов которые на выходе выдают какой-то Response - указывать баунд для Request

Alex
10.10.2016
13:36:02
ну или вообще заявка на катаморфизм некий

Mikhail
10.10.2016
13:36:16
потому как вроде респонзов без реквестов не бывает)
Тогда сигнатура Command[Request, Response, Event] - сказала бы примерно то, что было в ответе
Mikhail, [10 окт. 2016 г., 16:27]:
или респонз это выход команды, а ивент фоновая побочка команды?
Denis Mikhaylov, [10 окт. 2016 г., 16:28]:
да
эффект на стейт

Google

Denis
10.10.2016
13:37:25

Admin
ERROR: S client not available

Denis
10.10.2016
13:37:45
Так команда это и есть запрос

Mikhail
10.10.2016
13:38:37
а вот это я уже называю "плохо спроектировано"

Alex
10.10.2016
13:39:16
спроектировано может и норм, просто названия у типов немного запутывают

Denis
10.10.2016
13:39:18
sealed trait AccountOp[R]
case class OpenAccount(accountId: AccountId) extends AccountOp[Rejection Xor Done]
можно рассматривать как
trait AccountOp[F[_]] {
def openAccount(accountId: AccountId): F[Rejection Xor Done]
}

Mikhail
10.10.2016
13:39:21
потому что со временем я однозначно пришел к тому, что чтобы получить гибкость и переиспользуемость реквест ни в коем случае не должен определять вид респонза

Denis
10.10.2016
13:39:53
Запрос всегда определяет вид респонза

Mikhail
10.10.2016
13:39:56
нет

Alex
10.10.2016
13:39:59
ну понятно, free-фикация

Denis
10.10.2016
13:40:07
как нет? )

Mikhail
10.10.2016
13:40:08
вот тебе простой пример с хттп
возьми твиттер апи
на вход ты подаешь post params, а на выходе можешь получить как xml , так и json
request не меняется, респонз меняется

Denis
10.10.2016
13:40:55
XML Xor JSON

Mikhail
10.10.2016
13:41:00
это один из самых наглядных и базовых примеров

Denis
10.10.2016
13:41:01
Грубо говоря

Alex
10.10.2016
13:41:12
нондетерминизм это всегда приятно

Mikhail
10.10.2016
13:41:23
XML Xo JSON - в корне неправильно)

Google

Mikhail
10.10.2016
13:41:36
ибо xml, json - в данном конкретном случае - есть вид сериализации

Denis
10.10.2016
13:42:08
ну так это разные уровни абстракции
HttpRequest всегда даст HttpResponse

Alex
10.10.2016
13:42:20
type SerializedResponse = XML \/ Json ?

Mikhail
10.10.2016
13:42:31
да зачем это делать то
вы шо
это применяется на выходе
после того как оно будет сериализовано и записано в сокет - оно почистится из памяти
и другой код работать с этим не будет
а вы для него новый уровень абстракции хотите нагородить)