@oop_ru

Страница 39 из 785
Sergey
24.12.2016
00:04:27
я частенько так делаю)

но если у тебя большая система тебе ооочень легко потом заблудится где какая структура юзается

и рефакторить становится сложнова-то

da horsie
24.12.2016
00:05:15
если добавить контроль над типами, то чем они будут отличаться от анемичных моделей?

Google
da horsie
24.12.2016
00:06:24
т.е. твоим отношением к ним

Sergey
24.12.2016
00:06:34
если добавить контроль над типами, то чем они будут отличаться от анемичных моделей?
дто это тупые структуры данных, им не нужен гемоглабин в виде логики

Aleh
24.12.2016
00:06:49
т.е. твоим отношением к ним
Скорее их положением в системе

Sergey
24.12.2016
00:07:06
class UserDTO { public $id; public $name; public $birthday; }

вот пример DTO

если ты заметил - все проперти публичны

потому что это тупо структура данных

это не "объект" в привычном стиле

da horsie
24.12.2016
00:07:28
а где контроль над типами?

Sergey
24.12.2016
00:07:28
просто составной тип данных

а где контроль над типами?
phpdoc?) пока нет тайп хинтинга для пропертей только так)

da horsie
24.12.2016
00:08:05
ну ок

Google
da horsie
24.12.2016
00:08:08
логично вроде

Sergey
24.12.2016
00:08:08
а где контроль над типами?
тебя интересует не контроль над типами в рантайме, а статическая информация, то как это в коде

Sergei
24.12.2016
00:08:31
Для тех кто в танке - что есть "анемичные модели" (объекты без поведения, что ли?) и что есть "контроль над типами"?

Sergey
24.12.2016
00:08:33
потому что только статическая информация сильно помогает тебе при рефакторингах

da horsie
24.12.2016
00:09:34
контроль над типами это для языков со слабой типизацией

Sergey
24.12.2016
00:09:41
оно возвращает тупо массив... непонятно что внутри

da horsie
24.12.2016
00:09:42
или как оно проавильно называется

Sergey
24.12.2016
00:09:51
а если бы было toDTO(): UserDTO

то все уже намного лучше, и ты легко можешь в любимой IDE найти все места где юзается это DTO

контроль над типами это для языков со слабой типизацией
это просто возможность описать типы данных статически, в коде... что бы не надо было запускать (или интерпритировать в голове) что бы узнать "что же там"

сильно экономит время на чтение кода

Sergei
24.12.2016
00:11:19
@f3ath @fes0r спасибо, стало яснее.

Sergey
24.12.2016
00:11:29
а читаем код мы намного чаще чем пишем, а потому это то время которое надо экономить

ты потратишь на это DTO лишних 5 минут и возможно потом сэкономишь пол часа

da horsie
24.12.2016
00:11:50
такой вопрос тогда. есть слой A и слой B в приложении, которые обмениваются ДТОшками. A и B два разных модуля, к какому из них отнести ДТО?

Google
da horsie
24.12.2016
00:12:25
ну один их производит, другой потребляет

Sergey
24.12.2016
00:12:32
самый такой.... "правильный" что-ли пример это архитектура портов и адаптеров

или гексагональная архитектура

там четко прописано как слои отделены друг от друга, что где и какие направления зависимостей

если коротко - какой слой от какого ты хочешь изолировать при помощи DTO?

ну так... намекну что слой с UI не может не зависить от слоя с логикой... либо между этими слоями есть еще кто-то

da horsie
24.12.2016
00:18:12
у меня есть GitGatewayInterface, который из гита получает DTO с описанием разных сущностей (коммит, тег, итд). Есть Модели этих же сущностей, с логикой, которые используются в приложении. A - имплементация этого интерфейса, B - приложенме, которое зависит от интерфейса (получает его инстанс как зависимость). Они два разных модуля. К какому из них отнести ДТО?

ни к какому наверно?

к интерфейсу?

Sergey
24.12.2016
00:18:31
)))

давай по другому

da horsie
24.12.2016
00:18:41
поскольку они оба то интерфейса зависят

Sergey
24.12.2016
00:18:49
кто хочет получить DTO?

da horsie
24.12.2016
00:18:53
приложение

Sergey
24.12.2016
00:19:05
если коротко - что делает приложение напомни

приложение
ну то есть у тебя есть некий application layer

da horsie
24.12.2016
00:19:18
печатает ChangeLog

Sergey
24.12.2016
00:19:20
вот там и должен быть dto

da horsie
24.12.2016
00:19:50
приложение берет из гита последний тег и печатает, что в него вошло по сравнению с предыдущим

Sergei
24.12.2016
00:19:58
к интерфейсу?
Моё мнение - к интерфейсу. Который обещает эти сущности генерировать и выдавать по запросу.

Google
da horsie
24.12.2016
00:20:25
окей

Sergei
24.12.2016
00:20:52
Проясни

Sergey
24.12.2016
00:21:15
кто у тебя главный - интерфейс или приложение?

da horsie
24.12.2016
00:21:26
я вижу зависимости так [Приложение] -> [Интерфейс+ДТО] <- [Гит]

Sergey
24.12.2016
00:21:33
представь на секундочку что "интерфейс" не является частью приложения, это просто надстройка над ним

da horsie
24.12.2016
00:21:42
он и не является

Sergey
24.12.2016
00:22:10
зачем тогда тебе приложение в твоей схеме? что оно делает если у тебя интерфейс напрямую получает нужную информацию?

da horsie
24.12.2016
00:22:14
ну потому что они оба зависят от интерфейса (один принимает как депенденси, а другой имплементирует)

da horsie
24.12.2016
00:22:32
как не зависит?

оно его получает в конструктор

Sergey
24.12.2016
00:22:42
ну блин в этом смысл разделение

интерфейс зависит от приложения, а не приложение зависит от интерфейса

приложение ничего вообще не знает об интерфейсе

зачем в конструктор?

идем в википедию читать на тему Inversion of control

da horsie
24.12.2016
00:23:29
не понимаю если у тебя есть class A { __construct(B $b); }

Google
da horsie
24.12.2016
00:23:35
кто от кого зависит*

?

A от B, правлиьно?

Sergey
24.12.2016
00:23:46
повторюсь

то что ты передаешь UI в конструктор приложения - это уже ошибка

приложение надо передавать в конструктор UI

образно

Inversion of Control это называется

da horsie
24.12.2016
00:24:21
у меня нет UI в этой схеме

Sergey
24.12.2016
00:24:28
не приложение дергает фреймворк, а фреймворк дергает приложение

da horsie
24.12.2016
00:24:46
UI за скобками пока

я не понимаю

Sergei
24.12.2016
00:26:33
Sergey
24.12.2016
00:27:55
и почитай про inversion of control

da horsie
24.12.2016
00:28:27
A { __construct(B $b); } B - интерфейс

A - приложене

A зависит от B

Sergei
24.12.2016
00:28:41
и почитай про inversion of control
Это не особо объясняет.

da horsie
24.12.2016
00:28:43
что тут н етак?

Sergey
24.12.2016
00:29:04
что тут н етак?
то что у тебя приложение зависит от UI)

а приложение НИЧЕГО не должно знать о UI

Страница 39 из 785