Sergey
на спринге это проще... захуярил себе List<OloloInterface> services и не ебешь себе мозг
guga
Все, кроме хаскеля, он прекрасен.
Sergey
котлин практичен)
Sergey
практичность = компромисы
Sergey
это как инженеры vs ученые
Sergey
ну экстеншены мало кто назовет здравой идеей
Sergey
инженеры используют допущения, неточности, рандом
Sergey
ну как рандом.. скорее реальные условия
Sergey
а не лабораторные или какие-то теории
Sergey
да
guga
я считаю что это прекрасно
Sergey
если не злоупотреблять
Sergey
а то код быстро превращается в непонятные вещи)
guga
нодоело писать StringUtils, BlaBlaUtils
guga
а выглядят они лучше, чем теже имлиситы в скале
Sergey
я вот сегодня запилил себе fun Document.createElement(name: String, value: String = "", attributes: Map<String, String> = emptyMap()): Node { val element = this.createElement(name) element.textContent = value for ((attrName, attrValue) in attributes) { element.setAttribute(attrName, attrValue) } return element }
Sergey
и теперь можно хреначить appendChild(createElement("RelCode", attributes = mapOf("value" to "Regular")))
Sergey
вместо унылых записей в 3 строки
Sergey
val relCode = doc.createElement("RelCode") relCode.setAttribute("value", "Regular") requestItem.appendChild(relCode)
guga
а вот на оборот хочу как-то производную spec попробовать
Sergey
зачем?)
Sergey
spock какой-то?
guga
не знаю, spoсk выглядит довольно вкусно
Sergey
его ж вроде с груви только юзают?
guga
Нет, судя по тому что я видел, вполне удачно тестируют java код
Sergey
https://github.com/JetBrains/spek/blob/master/spek-samples/src/test/kotlin/org/jetbrains/spek/samples/CalculatorSpec.kt
Sergey
можно spek взять еще)
Sergey
https://www.youtube.com/watch?v=ZsHMHukIlJY
Sergey
оч годный видос
Sergey
можно собрать список видосов которые говорят "не юзайте геттеры и сеттеры")
🐴
массивы в php в качестве DTO - это ок?
Sergey
массивы в php в качестве DTO - это ок?
ну ты теряешь контроль над типами... а так ок
Sergey
контроль над структурами...
Sergey
я частенько так делаю)
Sergey
но если у тебя большая система тебе ооочень легко потом заблудится где какая структура юзается
Sergey
и рефакторить становится сложнова-то
🐴
если добавить контроль над типами, то чем они будут отличаться от анемичных моделей?
🐴
т.е. твоим отношением к ним
Sergey
если добавить контроль над типами, то чем они будут отличаться от анемичных моделей?
дто это тупые структуры данных, им не нужен гемоглабин в виде логики
Ale
т.е. твоим отношением к ним
Скорее их положением в системе
Sergey
class UserDTO { public $id; public $name; public $birthday; }
Sergey
вот пример DTO
Sergey
если ты заметил - все проперти публичны
Sergey
потому что это тупо структура данных
Sergey
это не "объект" в привычном стиле
🐴
а где контроль над типами?
Sergey
просто составной тип данных
Sergey
а где контроль над типами?
phpdoc?) пока нет тайп хинтинга для пропертей только так)
🐴
ну ок
🐴
логично вроде
Sergey
а где контроль над типами?
тебя интересует не контроль над типами в рантайме, а статическая информация, то как это в коде
Sergei
Для тех кто в танке - что есть "анемичные модели" (объекты без поведения, что ли?) и что есть "контроль над типами"?
Sergey
потому что только статическая информация сильно помогает тебе при рефакторингах
Sergey
function toDTO(): array;
🐴
контроль над типами это для языков со слабой типизацией
Sergey
оно возвращает тупо массив... непонятно что внутри
🐴
или как оно проавильно называется
Sergey
а если бы было toDTO(): UserDTO
Sergey
то все уже намного лучше, и ты легко можешь в любимой IDE найти все места где юзается это DTO
Sergey
контроль над типами это для языков со слабой типизацией
это просто возможность описать типы данных статически, в коде... что бы не надо было запускать (или интерпритировать в голове) что бы узнать "что же там"
Sergey
сильно экономит время на чтение кода
Sergei
@f3ath @fes0r спасибо, стало яснее.
Sergey
а читаем код мы намного чаще чем пишем, а потому это то время которое надо экономить
Sergey
ты потратишь на это DTO лишних 5 минут и возможно потом сэкономишь пол часа
🐴
такой вопрос тогда. есть слой A и слой B в приложении, которые обмениваются ДТОшками. A и B два разных модуля, к какому из них отнести ДТО?
🐴
ну один их производит, другой потребляет
Sergey
самый такой.... "правильный" что-ли пример это архитектура портов и адаптеров
Sergey
или гексагональная архитектура
Sergey
там четко прописано как слои отделены друг от друга, что где и какие направления зависимостей
Sergey
если коротко - какой слой от какого ты хочешь изолировать при помощи DTO?
Sergey
ну так... намекну что слой с UI не может не зависить от слоя с логикой... либо между этими слоями есть еще кто-то
🐴
у меня есть GitGatewayInterface, который из гита получает DTO с описанием разных сущностей (коммит, тег, итд). Есть Модели этих же сущностей, с логикой, которые используются в приложении. A - имплементация этого интерфейса, B - приложенме, которое зависит от интерфейса (получает его инстанс как зависимость). Они два разных модуля. К какому из них отнести ДТО?
🐴
ни к какому наверно?