
Aminion
04.06.2017
16:26:48
Ну допустим есть некое количество функций которые обрабатывают данные, которые берутся из бд, и результат кладется в бд, в шарпе это были бы классы, где в конструктор приходят все нужные репозитории и вспомогательные сервисы, и все бы это распихивалось рефлексией контейнером, а в фп как?

Vasily
04.06.2017
16:27:35
А в фп в параметры функции приходит функция

Pawel
04.06.2017
16:27:42
@Aminion программа на F# - это как правило обычное для продцедурных языков иерархическое дерево модулей с вершиной main, хотя можно и так как ты привык

Evgeniy
04.06.2017
16:28:40
@fvnever https://github.com/gsomix/avalonia-fsharp-netcore-showcase

Google

Pawel
04.06.2017
16:30:01
В F# ты мог бы сделать нижний модуль для интеропа с БД, выше - потокобезопасный твердотельный кэш БД, далее выше - апи доменной модели. Как вариант

Igor
04.06.2017
16:31:21

Evgeniy
04.06.2017
16:32:18
@angmarr А у тебя же MacOS? Если будет свободная минутка, поможешь протестировать проект, который я чуть выше кинул?

Igor
04.06.2017
16:32:55
Ок, попробую после

Evgeniy
04.06.2017
16:33:06
@angmarr Спасибо!

Aminion
04.06.2017
16:47:44
Хм, и функция обработки не должна вызывать функции репозитория, а только генерировать данные , которые покладет вышестоящая функция в базу?

Vasily
04.06.2017
16:48:28
По идее да
По факту должен получиться пайплайн, где сайд эффекты только в функции работы с репозиторием
В реальности,естественно, есть еще логирование

Aminion
04.06.2017
17:02:24
Если с аутпутом понятно, с инпутом не совсем, если я не функцию репозитория передаю, а уже данные, как быть с тем случаем, когда сама бизнесс логика решает, какие данные нужно получить, то есть нужны юзера, но при некоторых обстоятельствах ещё и продукты?

Igor
04.06.2017
17:04:12
Имхо, домен (логика) это набор if/match (и ТД) + конвертирование данных.
Сайд эффектам тут нет место.
Самое сложное в том чтобы разнести логику и инфраструктуру, а не как раньше в C# "все смешал в одном методе и обмазали DI"

Aleksander
04.06.2017
17:06:55
Ну в c# никто не запрещает бизнес логику реализовывать отдельно и без сайд эффектов. Собственно для этого там и требуется куча классов

Igor
04.06.2017
17:07:06
Если с аутпутом понятно, с инпутом не совсем, если я не функцию репозитория передаю, а уже данные, как быть с тем случаем, когда сама бизнесс логика решает, какие данные нужно получить, то есть нужны юзера, но при некоторых обстоятельствах ещё и продукты?
Суешь ее все сразу, а она разлулит.
Или делай 2, одна говорить что надо, а вторая отрабатывает.

Google

Aminion
04.06.2017
17:10:11
Все сразу? Это же дикий оверхед по обращению к бд, а если делать лениво, это и будет уже депенданси, а не данные

Igor
04.06.2017
17:10:30

Aminion
04.06.2017
17:11:30
Везёт вам, вы в продакшене фп используете?
*f#

Igor
04.06.2017
17:23:39
Лично я android разработчик ?, по
этому пока для себя.
На работе kotlin, но я считаю что f# все равно луче.
И даже на работе, я пишу в f# ФП стиле.

eugene
04.06.2017
17:43:12
:)

Klei
04.06.2017
17:43:41
Везёт вам, вы в продакшене фп используете?
Мне кажется, что надо на сайте завести страницу с кратким списком участников сообщества с описанием опыта на F#, местом работы, если оно связано с практическим использованием, местом обитания (авось встречу собрата в своем городе) и т.п. Ибо этот вопрос стабильно задается раз в неделю и на него уже лень отвечать.
// Разумеется на добровольной основе.

Roman
04.06.2017
17:45:21

Igor
04.06.2017
17:50:45

Nikolay
04.06.2017
17:51:26
У меня идея :)

Pawel
04.06.2017
17:51:32
Больше всего на выбор парадигмы программиррования влияет - внезапно - фреймворк и библиотеки. Если EF или SQLProvider, которые не предоставляют иммутабельного апи, то какой смысл делать "бизнесс логику" иммутабельной? Как лучше реализовать "бизнес логику" и прочие условные слои приложения - с сайд эффектами или без - зависит от задачи. Делать "бизнес логику" кровь из носа иммутабельной можно разве что из религиозных побуждений. Технически зачастую проще, надёжнее и эффективнее сделать на массивах, изменяемых переменных и мьютексах.

Nikolay
04.06.2017
17:51:34
Сделать DSL для авалонии
м?

Pawel
04.06.2017
17:51:54
а вот "инфраструктуру" всё таки лучше сделать иммутабельной .поскольку для неё (как правило) меньше требований по перформансу, чем к "бизнесс логике"

Evgeniy
04.06.2017
17:52:18
@Dolfik А что ты хочешь видеть в этом DSL?

Nikolay
04.06.2017
17:53:24
http://macoscope.com/blog/kotlin-anko-layouts/

Igor
04.06.2017
17:54:25

Nikolay
04.06.2017
17:54:52

Google

Evgeniy
04.06.2017
17:55:12
А мне нравится xaml. :C

Roman
04.06.2017
17:56:04

Nikolay
04.06.2017
17:56:31
grid {
rowDefintions {
rowDefintion 100
rowDefintion auto
rowDefintion 100
}
button {
content "Click me"
width 100
height 20
padding 5
click (fun x -> ...)
}
}
Типа такого, м?

Igor
04.06.2017
17:56:39
Да
Ох не знаю, после DSL Fable для реакта... (может быть я ещё не привык)

Nikolay
04.06.2017
17:57:03
Вроде красиво и читабельно
Заодно фшарп популярнее сделаем :)

Igor
04.06.2017
17:58:29

Летучая
04.06.2017
17:58:41
в жсоне как-то сложно на глаз воспринимается имхо

Nikolay
04.06.2017
17:59:46

Летучая
04.06.2017
18:00:12
а, этож даже чистый F#

Nikolay
04.06.2017
18:00:16
Это похоже на жсон, но ещё проще

Летучая
04.06.2017
18:00:49
круто!

Nikolay
04.06.2017
18:02:25
Ну что думаете по этому поводу?)

Evgeniy
04.06.2017
18:05:06
Я очень ок с текущим способом описания интерфейса.

Igor
04.06.2017
18:05:17
(Забыл синтаксис билдеров ?)
Мне кажется надо пруф-оф-концепт сделать обязательно ?
Что нибудь простое, для начала.

Ivan
04.06.2017
18:05:18

Google

Nikolay
04.06.2017
18:05:51
И ещё сюда хорошо зайдут единицы измерения :)

Evgeniy
04.06.2017
18:06:05
@Dolfik Но если тебе интересно, то можно попробовать кое-что посерьезнее. Например, реализовать Elm Architecture для Avalonia.
http://anthonylloyd.github.io/blog/2016/06/20/fsharp-elm-part1
http://anthonylloyd.github.io/blog/2016/07/01/fsharp-elm-part2

Nikolay
04.06.2017
18:06:05
Тут всё же получается довольно похоже на xaml

Evgeniy
04.06.2017
18:07:43
@Dolfik А ты уже читал эти статьи?

Nikolay
04.06.2017
18:08:16
Может чутка освобожусь, попробую prof of concept сделать

Pawel
04.06.2017
18:19:10
xaml страшнее атомной войны кстати, не понимаю что в нём может нравиться
уж насколько омерзителен html+css, но это имхо в разы лучше xaml

Nikolay
04.06.2017
18:23:35
Проблема будет в добавлении сторонних библиотек

Pawel
04.06.2017
18:25:18

Nikolay
04.06.2017
18:25:52
А почему нельзя? Там насколько я помню обычный аргумент передаётся, и можно в качестве аргумента указать что угодно

Pawel
04.06.2017
18:29:06
это ты написал котлин код с использованием Anko. " там насколько я помню обычный аргумент передаётся" - нет, там всё на много сложнее))

Nikolay
04.06.2017
18:30:51
Ну ок:
click {
...
}
Можно кстати попробовать сделать через тайп провайдер. Это вообще возможно?


Igor
04.06.2017
19:10:24
@fvnever https://github.com/gsomix/avalonia-fsharp-netcore-showcase
А как запускать то? При dotnet run выдает:
Hello World from F#!
[|"MainWindow+MainWindow.xaml"; "Application+App.xaml";
"FSharpSignatureData.avalonia-fsharp-netcore-showcase";
"FSharpOptimizationData.avalonia-fsharp-netcore-showcase"|]
Unhandled Exception: Avalonia.Gtk3.Interop.NativeException: dlsym(RTLD_DEFAULT, gtk_window_set_decorated): symbol not found
at Avalonia.Gtk3.Interop.UnixLoader.GetProcAddress(IntPtr dll, String proc, Boolean optional)
at Avalonia.Gtk3.Interop.Resolver.Resolve(String basePath)
at Avalonia.Gtk3.Gtk3Platform.Initialize()
at Avalonia.Controls.AppBuilderBase`1.Setup()
at Avalonia.Controls.AppBuilderBase`1.Start[TMainWindow](Func`1 dataContextProvider)
at Application.main(String[] argv) in /Users/igor/Documents/31/avalonia-fsharp-netcore-showcase/Application.fs:line 22

Evgeniy
04.06.2017
19:12:39
@angmarr Спасибо. Буду разбираться сейчас.

Google

Evgeniy
04.06.2017
19:13:38
> You need gtk+3 from brew to be installed on your Mac. Native Cocoa-based backend is currently under development and will be available in June.
Окей. Пока не очень удобно.
@angmarr Еще раз спасибо за тест.

Igor
04.06.2017
19:31:58

Evgeniy
04.06.2017
19:32:35
Отлично. :)

Pawel
04.06.2017
19:33:30
о, супер! авлония кросплатформенная благодаря gtk оказывется. не хватало ещё возиться с корявыми заброшенными биндингами кондовых линупсовых либ

Evgeniy
04.06.2017
19:34:05
@ruzzke_mir Свое мнение об Avalonia ты можешь высказать в @CSharpChat лично @nikita_tsukanov.

Nikolay
04.06.2017
19:35:30
Как завести авалонию без xaml? :)

Evgeniy
04.06.2017
19:43:04
@angmarr Осталось дождаться Cocoa backend и можно будет настоящие self-contained приложения для OSX собирать.
И все на F#, конечно же. :)

Igor
04.06.2017
19:48:53

Evgeniy
04.06.2017
19:50:16
Я не настаиваю.

Nikolay
04.06.2017
19:50:46
Пока как-то так получилось:
window {
minHeight 100.0
minWidth 100.0
content (
textBlock {
text "Hello, world!"
})
show
} |> ignore

Igor
04.06.2017
19:51:20

Nikolay
04.06.2017
19:51:47
Чёт пока не выходит

Roman
04.06.2017
20:14:40