
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
если они соблюдают контракт. Сложность именно с последним, контракт выходит неявным

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

Aleh
03.03.2017
19:42:14

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. Там у тебя объекты имеют разный цикл жизни и ты можешь как бы... перезапустить только часть системы, подменить реализацию в рантайме
это как распределенная система акторов

Aleh
03.03.2017
19:45:54

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
импортируешь ты только заголовочные файлы как интерфейсы