@oop_ru

Страница 137 из 785
da horsie
03.03.2017
19:18:37
и его стандартную библиотеку например)
ну логично, надо головой думать

если у тебя там два контроллера и одна моделька - можно взять какой-нить микрофреймворк (например silex, если мы про php) и сделать все в одном файле

и будет ок

и счастье и пони на радуге

Google
da horsie
03.03.2017
19:20:56
но когда система начинает усложняться, фреймворк начинает диктовать свои условия и мешать

вносит тот самый design damage

https://www.youtube.com/watch?v=tg5RFeSfBM4

вот классика

Aleh
03.03.2017
19:33:27
@fes0r расскажи про свое видение модулей)

Меня вопрос ваще капец как волнует (

Ну точнее, где живет клей для модулей

Sergey
03.03.2017
19:35:52
в модуле)

не сказать что у меня "ясное виденье" модуля)

ну то есть у тебя есть модуль и он что-то делает

он может внутри использовать другие модули

и вся система - модуль

ну то есть - Д - декомпозиция

Google
Sergey
03.03.2017
19:36:51
где лежат модули и кому принадлежат - coheasion

Aleh
03.03.2017
19:37:00
Ну, если взять пайтон/esm, то используя модули мы будем выстраивать пирамидки

Sergey
03.03.2017
19:37:12
пирамидки?

Aleh
03.03.2017
19:37:32
Главный модуль импортит модули верхнего уровня, они модули ниже

И т.д.

Пирамидка

Sergey
03.03.2017
19:37:51
нуууу.... тип того

Aleh
03.03.2017
19:38:14
В то время как хочется модули верхнего уровня абстрагировать от нижнего

И сделать их зависимыми от абстракций

Sergey
03.03.2017
19:38:34
эм.... а у тебя это не достигается?

ну то есть ты говоришь например в питоне - "хочу модуль foo"

и ты знаешь что этот модуль предоставляет тебе определенный интерфейс по работе с оным

а реализация - скрыта

ну и ты можешь переопределить откуда берется модуль

по сути ты получаешь ровно то же самое что и в случае с IoC

Aleh
03.03.2017
19:39:33
Ну примерно также, как если я говорю, что завишу от конкретного класса)

Sergey
03.03.2017
19:39:33
просто чуть-чуть по другому и менее явно

Aleh
03.03.2017
19:39:51
Как бы скрыта и я взаимодейтсвую только с публичным интерфейсои

Sergey
03.03.2017
19:39:53
Ну примерно также, как если я говорю, что завишу от конкретного класса)
не совсем. Ты зависишь от модуля. у модуля может быть много реализаций

Aleh
03.03.2017
19:40:00
Это как?

Google
Sergey
03.03.2017
19:40:06
если они соблюдают контракт. Сложность именно с последним, контракт выходит неявным

Это как?
import {foo} from 'fooModule';

Aleh
03.03.2017
19:40:30
И?

Sergey
03.03.2017
19:40:32
у тебя модуль fooModule должен иметь функцию foo

которая что-то делает

Aleh
03.03.2017
19:40:38
Да

Sergey
03.03.2017
19:40:48
ну.... ты можешь подменить реализацию

da horsie
03.03.2017
19:40:52
import {foo} from 'barModule';

Sergey
03.03.2017
19:40:53
но... хотя

Aleh
03.03.2017
19:41:02
Также как в классе метод

Могу заменить да)

da horsie
03.03.2017
19:41:10
почему?

Sergey
03.03.2017
19:41:11
нельзя менять код)

da horsie
03.03.2017
19:41:17
а

Sergey
03.03.2017
19:41:32
но ты можешь переопределить откуда брать модуль fooModule

и подсовывать вместо него fooModule

Aleh
03.03.2017
19:41:48
Ага, также как могу переопределить загрузчик классов

Sergey
03.03.2017
19:41:48
во всяком случае в питоне

Google
Sergey
03.03.2017
19:42:18
то тогда да и в целом я тут подумал что это не дает late binding

ну то есть в рантайме ты уже не так легко можешь зависимости подменить... хотя

Aleh
03.03.2017
19:43:02
Ну понимаешь мою проблему?)

Sergey
03.03.2017
19:43:17
ну в целом смотри

Aleh
03.03.2017
19:43:27
В пайтоне активно юзают инъекцию в конструктор

Sergey
03.03.2017
19:43:29
тут идея насколько я понимаю - та же что и с IoC но вывернута наизнанку

В пайтоне активно юзают инъекцию в конструктор
есть такое, но еще там часто не юзают классы

ну мол.... с модулями - ты не паришься о зависимостях модуля. Тот сам разрулит. Как через сервис локатор

Aleh
03.03.2017
19:44:30
Вообще

Admin
ERROR: S client not available

Sergey
03.03.2017
19:44:32
и у тебя есть возможность переопределить сервис локатор для модуля

что бы подсовывать ему другие зависимости

Aleh
03.03.2017
19:44:42
В чем профиты позднего связывания

В рантайме можно определять зависимости и менять флоу программы

Можно модуль выдрать из системы простым cp

Sergey
03.03.2017
19:45:25
В чем профиты позднего связывания
возможность подменить реализацию в рантайме. Ты ж вспомни - это было в smalltalk. Там у тебя объекты имеют разный цикл жизни и ты можешь как бы... перезапустить только часть системы, подменить реализацию в рантайме

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

Sergey
03.03.2017
19:45:57
и late binding обеспечивал возможность подменять объекты и они даже не замечали что общаются уже с другим

Google
Aleh
03.03.2017
19:46:28
Ну и тут еще

Sergey
03.03.2017
19:46:29
это как перезапустить тред в erlang

Aleh
03.03.2017
19:46:37
Захотелось в разных местах разные реализации

Или даж в рамках одного модуля

Тут мы автоматически проиграли

Но списываем на редкость кейса

Sergey
03.03.2017
19:47:15
нуууу не то что бы

вообще интересная тема

Aleh
03.03.2017
19:48:14
Пирамидки это из паскаля, late binding это смолток и лисп

Sergey
03.03.2017
19:51:51
ну тип того... но вообще надо сча погуглить

в целом... надо как-то углубиться в историю

https://en.wikipedia.org/wiki/Modula-2

Aleh
03.03.2017
19:57:26
ну модула уже после паскаля была

Sergey
03.03.2017
19:57:41
ну да

но там модули более явно сделаны

сча гуглю почему Вирт замутил так

и почему начал развивать идею

или вот еще накину

Си

там "интерфейс" модуля - заголовочный файл и есть файл с реализацией.

и ты можешь подменять реализацию

Aleh
03.03.2017
19:59:54
на этапе компиляции

Sergey
03.03.2017
19:59:56
импортируешь ты только заголовочные файлы как интерфейсы

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