Это у всех так. Попробуйте внимательно понаблюдать за интонациями коллег при обсуждении каких-либо разногласий. Почти каждому нужно эмоционально самовыразиться.
Просто у нас это настолько повсеместно, что считается нормальным.
Это места стыковки с остальной системой. Само по себе взаимодействие клиента с сервером не изменилось.
То есть при выделении сервиса никаких новых сетевых взаимодействий не возникло?
Чтобы выделить сервис, вовсе не обязательно выковыривать код его бизнес-логики из старой системы.
Попробуйте заменить в этих рассуждениях "сервис" на "модуль" или "сборку" — получится то же самое, нет?
Я пытаюсь разобраться в микросервисах, пока получается, что решаются две задачи — логическое выделение отдельного модуля и техническое обеспечение взаимодействия через сеть. Во втором случае мы получаем дополнительно возможность использовать разные технологии для сервисов разную масштабируемость и так далее.
Но логически можно выделить отедльный модуль и без выделения в сервис. Кроме, того, что сетевое взаимодействие накладывает дополнительные ограничения на связанность (например, в DDD есть правило, что нельзя делать ссылки внутрь агрегатов, но, насколько я знаю, нет способа проверять это правило. В случае сервисов не получится его не соблюдать так как нельзя делать ссылок внутрь сервиса)
Я пытаюсь понять, что для вас было главным — технические проблемы или логические.
Где-то у Фаулера я видел рекомендации сначала, выделять отдельные модули, потом, отделять хранилища (условно, чтобы модули взаимодействовали внутри с ограничениями характерными для микросервисов, но in-process), потом, выделять микросервисы.
А где тут "сетевое взаимодействие"? Этот отдельный домен может быть модулем, а не сервисом. Если никто не знает всех нюансов, то как они потом переключат использование на сервис — там будут абсолютно те же самые проблемы что и в случае использование отдельного модуля + дополнительные проблемы связанные с сетевым взаимодействием.
В случае рефакторинга хотя бы есть инструменты позволяющие делать его автоматизировано и возможность не ломать существующие тесты.
Попробуйте в уме разделить проблемы на логические и технические: выделение абстракции внутри кода и обеспечения того, чтобы эта абстракция была реализована именно в виде отдельного сервиса (не библиотеки, модуля, класса или чего-там-есть в вашем любимом ЯП).
Логические проблемы будут примерно такие же, а технических больше при выделении в отдельный сервис.
Нет, это не правда. Проблема вашего непонимания в том, что вы говорите о Классах и Типах как об одном и том же.
С чего вы решили, что автор считает что это одно и то же. Из приведенной цитаты этого не следует.
Если множество запросов совпадает — значит у объектов Тип будет общим, независимо от того к какому Классу эти объекты принадлежат.
Метод void Close() и метод void Close() это один и тот же запрос?
А вот так:
/* Закрывает окно, потом его можно переоткрыть при помощи Open()
*/
void Close()
/* Закрывает поток, поток нельзя больше использовать. Изменения сбрасываются в файл на диске.
*/
void Close()
Т.е. у нас могут быть методы с одинаковыми именами и одинаковыми типами, но означающие разные действия. А в каком-то другом более выразительном языке это может быть выражено и в терминах типов.
В номинативной типизации мы предполагаем, что не знаем по умолчанию, обозначают ли одинаковые слова одинаковые понятия, пока кто-то не укажет это явно.
берём юнит, который содержит код, ходящий в http или в Database.
его тест — юниттест или не юниттест?
Юнит тест это размытое понятие. Что конкретно имел ввиду 0xd34df00d под ним — надо спросить у него.
"многие не любят" — это что-то странное.
Почему. Многие не любят острую пищу. Чем это странное понятие? В реальности такое считается.
Напоминаю, мы не обсуждаем нужны ли юнит тесты, мы обсуждаем считает ли 0xd34df00d что никаие автоматические тесты не нужны. По его посту очевидно, что он считает что какую-то часть тестов он считает избыточной при статической типизации а не то, что никакие тесты не нужны.
Программист вообще ничем заниматься не обязан кроме программирования. По определению слова "программист".
Но, у работодателя есть свобода договориться с программистом на что-то еще и предпочесть такого программиста, который что-то еще делает. И тогда конкретный программист становится обязан.
Теперь представьте что может быть промежуточная ситуация — вы не ведете блог компании самостоятельно полностью всегда, а просто написали один пост. Или увидели в чужом посте ошибку и попросили поправить.
Это у всех так. Попробуйте внимательно понаблюдать за интонациями коллег при обсуждении каких-либо разногласий. Почти каждому нужно эмоционально самовыразиться.
Просто у нас это настолько повсеместно, что считается нормальным.
То есть при выделении сервиса никаких новых сетевых взаимодействий не возникло?
Попробуйте заменить в этих рассуждениях "сервис" на "модуль" или "сборку" — получится то же самое, нет?
Я пытаюсь разобраться в микросервисах, пока получается, что решаются две задачи — логическое выделение отдельного модуля и техническое обеспечение взаимодействия через сеть. Во втором случае мы получаем дополнительно возможность использовать разные технологии для сервисов разную масштабируемость и так далее.
Но логически можно выделить отедльный модуль и без выделения в сервис. Кроме, того, что сетевое взаимодействие накладывает дополнительные ограничения на связанность (например, в DDD есть правило, что нельзя делать ссылки внутрь агрегатов, но, насколько я знаю, нет способа проверять это правило. В случае сервисов не получится его не соблюдать так как нельзя делать ссылок внутрь сервиса)
Я пытаюсь понять, что для вас было главным — технические проблемы или логические.
Где-то у Фаулера я видел рекомендации сначала, выделять отдельные модули, потом, отделять хранилища (условно, чтобы модули взаимодействовали внутри с ограничениями характерными для микросервисов, но in-process), потом, выделять микросервисы.
А где тут "сетевое взаимодействие"? Этот отдельный домен может быть модулем, а не сервисом. Если никто не знает всех нюансов, то как они потом переключат использование на сервис — там будут абсолютно те же самые проблемы что и в случае использование отдельного модуля + дополнительные проблемы связанные с сетевым взаимодействием.
В случае рефакторинга хотя бы есть инструменты позволяющие делать его автоматизировано и возможность не ломать существующие тесты.
Попробуйте в уме разделить проблемы на логические и технические: выделение абстракции внутри кода и обеспечения того, чтобы эта абстракция была реализована именно в виде отдельного сервиса (не библиотеки, модуля, класса или чего-там-есть в вашем любимом ЯП).
Логические проблемы будут примерно такие же, а технических больше при выделении в отдельный сервис.
Почему? Разве это не то же самое + накладные расходы на то, что с сервисом надо учитывать все особенности сетевого взаимодействия?
С того, что там автор говорит о мнении авторов языка, а не о своем. По остальным вопросам, вам, вроде ответили в других комментариях.
В данном случае это значит, что среди двух методов можно найти что-то общее, а не то, что они тождественны. Так же можно сказать, что они оба методы.
Да он будет возвращать число равно сумме, но других чисел: -2 и 2. Оно так же будет равняться произведению 1 и 0
С чего вы решили, что автор считает что это одно и то же. Из приведенной цитаты этого не следует.
Метод void Close() и метод void Close() это один и тот же запрос?
А вот так:
Т.е. у нас могут быть методы с одинаковыми именами и одинаковыми типами, но означающие разные действия. А в каком-то другом более выразительном языке это может быть выражено и в терминах типов.
В номинативной типизации мы предполагаем, что не знаем по умолчанию, обозначают ли одинаковые слова одинаковые понятия, пока кто-то не укажет это явно.
https://en.wikipedia.org/wiki/Structural_type_system
Есль графические языки и языки которые на хранят текст в файлах. Возможно есть языки не предназначенные для выполнения, а только для рассуждений.
Есть несерьезные языки программирования, например шуточные
Вы очень категоричны и неуважительны.
В .NET есть разные штуки чтобы генерировать промежуточный код в рантайме. Можно компилировать ExpressionTree или генерировать байткод.
Можно скомпилировать DLL из исходного текста и подгрузить в процесс.
В стандартной библиотеке регекспы компилятся.
Юнит тест это размытое понятие. Что конкретно имел ввиду 0xd34df00d под ним — надо спросить у него.
Почему. Многие не любят острую пищу. Чем это странное понятие? В реальности такое считается.
Напоминаю, мы не обсуждаем нужны ли юнит тесты, мы обсуждаем считает ли 0xd34df00d что никаие автоматические тесты не нужны. По его посту очевидно, что он считает что какую-то часть тестов он считает избыточной при статической типизации а не то, что никакие тесты не нужны.
Он написал о ненужности юнит тестов, а не тестов вообще. Юнит тесты многие не любят
Что такое "вполне типизированный"? Как F# в котором есть поддержка единиц измерения? Или как C?
Можно убрать return и фигурные скобочки
C#
Насколько я понимаю, хаскеллевские алгебраические типы компилируются во что-то подобное. 0xd34df00d, вероятно, не считает kind информацией о типе
https://en.wikipedia.org/wiki/Tagged_union#1970s_&_1980s
А этот инт логически не будет информацией о типе?
Программист вообще ничем заниматься не обязан кроме программирования. По определению слова "программист".
Но, у работодателя есть свобода договориться с программистом на что-то еще и предпочесть такого программиста, который что-то еще делает. И тогда конкретный программист становится обязан.
Т.е.
Теперь представьте что может быть промежуточная ситуация — вы не ведете блог компании самостоятельно полностью всегда, а просто написали один пост. Или увидели в чужом посте ошибку и попросили поправить.
Почему вы пишете на форум сами а не наняли специального флеймера?
Доска отвечает на вопрос чем именно занимается команда и "есть ли что потестить"
WIP отвечает на вопрос стоит ли сейчас помогать тем, кто тестирует обычно или лучше покодить.