@oop_ru

Страница 139 из 785
Sergey
04.03.2017
14:33:33
ну то есть контракт неявный выходит

и только

есть масса языков где контракты неявные

Aleh
04.03.2017
14:34:03
А есть меинстрим язык с явными?

Google
Sergey
04.03.2017
14:34:19
ну java-like

python, ruby, golang - неявно

по сути - duck typing

Aleh
04.03.2017
14:34:33
то что экспоузит модуль
Также можно сказать, что публичная часть класса интерфейс и интерфейсы не использовать

Sergey
04.03.2017
14:34:42
если у модуля есть функция такая-то значит подходит

и у тебя по сути late binding)

Aleh
04.03.2017
14:35:20
import export в js в компайл тайме ж

Sergey
04.03.2017
14:35:37
import export в js в компайл тайме ж
и? я не вижу в этом проблемы

в языках типа java ты тоже обычно конфиг контейнера правишь и потом перезапускаешь апу

да даже в php

мне надо дапнуть новый контейнер

так что в целом разница не большая, просто тебе надо подменить какой модуль вернется на самом деле

Google
Aleh
04.03.2017
14:36:54
Суть скорее не в том, что я подменять после запуска аппы хочу, а то, что я модули сами не трогаю

Достаточно поправить конфиг или мэин

Paul
04.03.2017
14:37:22
import export в js в компайл тайме ж
ну, на клиенте systemjs, а на сервере в commonjs, а там уже можно подменить require, чтобы выдавать нужное

Aleh
04.03.2017
14:37:33
Делаем вид, что он везде работает)

Кстати вопрос с тем, как в ноде можно будет контролить резолвер для esm интересен

Paul
04.03.2017
14:38:57
на клиент всегда компиляция будет, так что пофиг

Aleh
04.03.2017
14:39:04
Это да

Paul
04.03.2017
14:39:11
точнее минификация и байдлинг

Sergey
04.03.2017
14:39:41
Суть скорее не в том, что я подменять после запуска аппы хочу, а то, что я модули сами не трогаю
так ты и не трогаешь, трогаешь только резолюцию ну мол какой модуль ресолвить

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

а вот если не можешь подменить - тогда у тебя проблемы)

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

Aleh
04.03.2017
14:40:58
То совсем хорошо

Но вот есть сейчас яп, в котором конфиг резолва сделан каким-то стандартным способом и все тулзы подхватывают project-specific настройки?

Paul
04.03.2017
14:43:32
Эм. Я зачем?

Для ide это важным быть не должно, а во время выполнения можешь крутить require в js как угодно

Paul
04.03.2017
14:44:16
нет

Google
Aleh
04.03.2017
14:44:17
Paul
04.03.2017
14:44:28
Ты же тут заливаешь про интерфейсность модулей

Aleh
04.03.2017
14:44:29
В линте проверить соответствие типов

Paul
04.03.2017
14:44:36
Никаких конкретных реализаций

Aleh
04.03.2017
14:45:03
тоже интерфейсность
Как проверить, что модуль соответствует интерфейсу?

И какому он должен соответствовать?

Paul
04.03.2017
14:45:39
Такому, который ты где-то описал. Ты ведь его описал, чтобы любой мог свою реализацию написать, верно?

Paul
04.03.2017
14:46:38
Не знаю умеет ли какой линтер смотреть в module.exports, но запилить это не проблема

Sergey
04.03.2017
14:47:09
Не знаю умеет ли какой линтер смотреть в module.exports, но запилить это не проблема
разговор идет о том что бы подменить модуль не трогая зависимые модули

Paul
04.03.2017
14:47:12
мб можно с внешней стороны попробовать: const a: IModule = require('a'), но не думаю, что прокатит хотя бы у кого-то

Aleh
04.03.2017
14:47:22
Так а в module.exports чего?

Aleh
04.03.2017
14:47:45
Возьмем для простоты esm

Там все статическое

Paul
04.03.2017
14:48:00
нет, простота это commonjs

Так что бери его, если хочешь

Aleh
04.03.2017
14:48:06
Там динамика

Google
Aleh
04.03.2017
14:48:13
Там непросто)

Paul
04.03.2017
14:48:20
Это неважно. После инициализации там всё как обычно

Там как раз просто, нет никаких default

Aleh
04.03.2017
14:48:47
Как статически проверить соответствие?

Paul
04.03.2017
14:48:49
В любом случае, никто не мешает перегнать в commonjs, а его чекать указанным образом

Aleh
04.03.2017
14:48:57
Paul
04.03.2017
14:49:00
Как статически проверить соответствие?
Так же как проверять другие объекты

Aleh
04.03.2017
14:49:00
С дефолт

Так же как проверять другие объекты
В общем случае никак? Тогда не подходит

Sergey
04.03.2017
14:49:20
Так же как проверять другие объекты
но подменяя require ты узнаешь о зависимостях только в рантайме

Admin
ERROR: S client not available

Paul
04.03.2017
14:49:21
Это ещё одна концепция, в терминах commonjs невыразимая.

Aleh
04.03.2017
14:49:37
Это проблемы cjs

Paul
04.03.2017
14:49:38
но подменяя require ты узнаешь о зависимостях только в рантайме
Тебя не должно это в компайлтайме волновать

Это проблемы cjs
С чего вдруг?

концепции default нет нигде

А если сборщик узнает (посредством плагина) о том, как ты резолвишь, то и в компайлтайме можно

Для какого-нибудь webpack-а раз плюнуть написать

Если не ошибаюсь, для browserify был какой-то способо даже перезаписать через конфиг

Sergey
04.03.2017
14:51:28
Тебя не должно это в компайлтайме волновать
вообще-то должно, задача такая стоит, проверить совместимость контрактов модулей статически и иметь возможность декларировать какой модуль подсовывать.

Google
Sergey
04.03.2017
14:51:55
ну то есть не совсем так

Paul
04.03.2017
14:52:09
Тогда у тебя нет и контрактов

Sergey
04.03.2017
14:52:10
они у тебя есть

но неявные

Paul
04.03.2017
14:52:20
И как они описаны?

Sergey
04.03.2017
14:52:21
типа

const foo = require('foo');

вот

Paul
04.03.2017
14:52:36
И что?

Sergey
04.03.2017
14:52:37
точнее даже так

import {doStuff} from 'foo'

вот мой "контракт"

Paul
04.03.2017
14:53:10
Эм. Это просто интерфейс

Sergey
04.03.2017
14:53:11
должен быть метод doStuff который делает то что мне нужно

Paul
04.03.2017
14:53:14
что есть какой-то doStuff

должен быть метод doStuff который делает то что мне нужно
Это ты вообще никогда нигде не проверишь

Sergey
04.03.2017
14:53:23
Эм. Это просто интерфейс
то есть контракт)

Paul
04.03.2017
14:53:28
Разве что в каких-то adga

то есть контракт)
Интерфейс частный случай. Ты сказал, что их нет

Sergey
04.03.2017
14:53:44
Это ты вообще никогда нигде не проверишь
нормальный IoC контейнер позволяет проверять то ли ты забиндил

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