
Kirill
12.03.2018
11:06:50
Помню что там и интерфейсов-то нет)

Igor
12.03.2018
11:07:16
(ну трейты)

Kirill
12.03.2018
11:07:24
(ну шутейки)
Вроде можно, но не уверен, т.к. не сталкивался

Google

Kirill
12.03.2018
11:08:16
это надо @eld0727 спросить)
И меня лично не очень радуют люди которые тащат в котлин например котов

Igor
12.03.2018
11:09:47

Kirill
12.03.2018
11:10:35
да понятно что костыль, но таки удобный для ОО языков
в груви вроде есть

Alexey
12.03.2018
11:11:05

Kirill
12.03.2018
11:11:29
вот и получается - везде есть кроме котлина)

Igor
12.03.2018
11:12:04
Видать скала более ООП ?

Kirill
12.03.2018
11:13:22
засчитано)

Alexey
12.03.2018
11:15:16

Konstantine
12.03.2018
11:25:41
Используя Moxy, при инжекте презентера, его надо делать lateinit?

Anton
12.03.2018
11:28:40
@kotlin_mobile

Google

Глеб
12.03.2018
11:29:16

Konstantine
12.03.2018
11:29:41
А есть варианты?
Вот я и спрашиваю. А то не очень люблю эти lateinit, может есть другой вариант.
Как-нибудь с lazy, например.

Mikhail
12.03.2018
11:30:49

Konstantine
12.03.2018
11:31:05
Звучит такое себе

Mikhail
12.03.2018
11:31:19
типа не пишешь lateinit в клиентском коде
плюс можно отлавливать NOtInitializedException и пробрасывать более узкое

Глеб
12.03.2018
11:31:49
А в чем проблема lateinit? А то, кажется, я упускаю что-то из виду, коли оно доставляет кому-то проблемы.

Mikhail
12.03.2018
11:32:20

Alexey
12.03.2018
11:47:25
Я щас конечно наброшу, но все эти инициализации через контейнеры - это такое себе
Старый добрый конструктор и никаких проблем

Quantum Harmonizer
12.03.2018
11:48:00

Alexey
12.03.2018
11:48:26
А все inject делают код сильно зависимым от "магии" контейнера

Konstantine
12.03.2018
11:51:50
Ужасный вопрос, да:)

Даниил
12.03.2018
11:53:21
http://www.yegor256.com/2014/10/03/di-containers-are-evil.html

Alexey
12.03.2018
11:54:39
Не упоминайте бугаенко в суе

Даниил
12.03.2018
11:54:54
другой вопрос что его the right way мне тоже не нравится, там как-то декомпозировать надо ящитаю шоб не было простыней таких при вызове конструктора

Alexey
12.03.2018
11:55:27
Каких простыней Оо

Google

Даниил
12.03.2018
11:56:13


Konstantine
12.03.2018
11:57:01
final Agent agent = new Agent.Iterative(
new Array<Agent>(
new Understands(
this.github,
new QnSince(
49092213,
new QnReferredTo(
this.github.users().self().login(),
new QnParametrized(
new Question.FirstOf(
new Array<Question>(
new QnIfContains("config", new QnConfig(profile)),
new QnIfContains("status", new QnStatus(talk)),
new QnIfContains("version", new QnVersion()),
new QnIfContains("hello", new QnHello()),
new QnIfCollaborator(
new QnAlone(
talk, locks,
new Question.FirstOf(
new Array<Question>(
new QnIfContains(
"merge",
new QnAskedBy(
profile,
Agents.commanders("merge"),
new QnMerge()
)
),
new QnIfContains(
"deploy",
new QnAskedBy(
profile,
Agents.commanders("deploy"),
new QnDeploy()
)
),
new QnIfContains(
"release",
new QnAskedBy(
profile,
Agents.commanders("release"),
new QnRelease()
)
)
)
)
)
)
)
)
)
)
)
),
new StartsRequest(profile),
new RegistersShell(
"b1.rultor.com", 22,
"rultor",
IOUtils.toString(
this.getClass().getResourceAsStream("rultor.key"),
CharEncoding.UTF_8
)
),
new StartsDaemon(profile),
new KillsDaemon(TimeUnit.HOURS.toMinutes(2L)),
new EndsDaemon(),
new EndsRequest(),
new Tweets(
this.github,
new OAuthTwitter(
Manifests.read("Rultor-TwitterKey"),
Manifests.read("Rultor-TwitterSecret"),
Manifests.read("Rultor-TwitterToken"),
Manifests.read("Rultor-TwitterTokenSecret")
)
),
new CommentsTag(this.github),
new Reports(this.github),
new RemovesShell(),
new ArchivesDaemon(
new ReRegion(
new Region.Simple(
Manifests.read("Rultor-S3Key"),
Manifests.read("Rultor-S3Secret")
)
).bucket(Manifests.read("Rultor-S3Bucket"))
),
new Publishes(profile)
)
);
?


Quantum Harmonizer
12.03.2018
11:57:10
простынь делает всё очевидным, собирает весь граф из кусочков, это круто

Alexey
12.03.2018
11:57:17

Quantum Harmonizer
12.03.2018
11:57:33
и уж точно лучше, чем @Qualifier, @Scope, вся эта срань

Даниил
12.03.2018
11:57:37
я не говорю про DI-контейнеры с их магией

Quantum Harmonizer
12.03.2018
11:58:04

Alexey
12.03.2018
11:58:07
imho - вот right way
val service1 = Service1(
service2 = service2,
service3 = service3,
db = myDbInstance
)
и тд

Даниил
12.03.2018
11:58:40

Глеб
12.03.2018
11:58:44

Alexey
12.03.2018
11:59:09

Даниил
12.03.2018
11:59:12
ну ии ещё такой момент, что на практике через конструктор как я понимаю зачастую нужно будет фабрики, а не сами инстансы

Alexey
12.03.2018
11:59:26
Фааааабрики
Нет спасибо

Quantum Harmonizer
12.03.2018
11:59:29

Даниил
12.03.2018
11:59:38

Google

Даниил
12.03.2018
11:59:44
если тебе нужно создавать объект не один раз
а per request скажем

Alexey
12.03.2018
11:59:53
() => service

Даниил
12.03.2018
12:00:01
ну это изоморфно фабрике)

Alexey
12.03.2018
12:00:11
Модульная структура

Quantum Harmonizer
12.03.2018
12:00:16
Фабрики нужны, когда они нужны, и не нужны, когда не нужны, давайте не переусложнять.

Даниил
12.03.2018
12:00:25

Глеб
12.03.2018
12:00:26

Admin
ERROR: S client not available

Konstantine
12.03.2018
12:00:35

Quantum Harmonizer
12.03.2018
12:00:45

Mikhail
12.03.2018
12:00:58
акцент слегка не на том

Alexey
12.03.2018
12:01:33
вот тут уже не понял
Ну типо берешь такой, делаешь модули, где всё инициализируется и создаёшь на каждый запрос новый объект модуля и все дела

Mikhail
12.03.2018
12:01:44
DI фреймворки упрощают иньекцию через конструктор, во всяких там koin ты ту же простыню пишешь, но отдельно от места, где просишь зависимости
а вот иньекция в поля или методы - зло
но зло неизбежное, доколе мы пишем на фреймворках придуманных в прошлом десятилетии

Alexey
12.03.2018
12:02:49

Konstantine
12.03.2018
12:02:51
Просто создание отдельно всех объектов и их последующий проброс в конструктор и DI с инъекцией в конструтор - не одно ли и тоже)

Quantum Harmonizer
12.03.2018
12:03:04

Google

Mikhail
12.03.2018
12:03:33

Alexey
12.03.2018
12:03:43

Даниил
12.03.2018
12:03:49
или лямбда возвращающая новый модуль, что есть по сути та же фабрика, только в профиль

Quantum Harmonizer
12.03.2018
12:04:06

Mikhail
12.03.2018
12:04:09

Alexey
12.03.2018
12:04:16

Даниил
12.03.2018
12:04:28

Valentin
12.03.2018
12:04:47
сорри

Alexey
12.03.2018
12:04:54

Mikhail
12.03.2018
12:05:12
считай ты вынес это полотно в отдельный factory method

Alexey
12.03.2018
12:06:11

Даниил
12.03.2018
12:06:30

Alexey
12.03.2018
12:07:45
Я прост хочу чтобы мир стал чуточку лучше :)

Konstantine
12.03.2018
12:07:57
Благо в магии ничего плохого нет.
Явное, конечно, лучше неявного, но не надо перебарщивать.

Alexey
12.03.2018
12:08:39
Явно лучше, чем неявно - спорно, а вот компайл тайм лучше, чем рантайн - это априори

Даниил
12.03.2018
12:08:49
собсно сам факт того что всякие кодеины могут в рантайме NPE бросить меня совсем не радует

Igor
12.03.2018
12:09:26