Читаю исходные коды, написаные другими программистами, и понимаю, что в образовательных целях и для привития хорошего стиля в программировании надо просто заставлять людей какое-то время писать на функциональных языках.
Иначе они даже в OO модели пишут классический спагетти код - с сайд эффектами, с использованием переменных класса в качестве
(
Read more... )
но у него есть проблема с отладкой. большая проблема всех процедурных языков (OO в том числе) - функции имеют side effects. Я хочу иметь гарантированно выделенные куски кода, которые не трогают ничего, кроме своих аргументов. Т.е. работают строго над своими аргументами, их не меняют, возвращают все что надо.
В классическом функциональном языке это выглядит как (NewState, Result) = f(OldState, Input), т.е. имеет классический детерменированный автомат.
Отлаживать/писать тесты на такой автомат _существенно_ легче, чем код, который внутри себя что-то там изменяет.
Иначе написание unit тестов превращается в следующее:
- загоним объект в нужное исходное состояние (как-то, зачастую это не так то и легко, потому что часть состояния в private/protected)
- вызовем метод, проверим что нам возвратили
- посмотрим как поменялось состояние объекта (если мы сумеем до него добраться)
в случае, если применять подход с минимум side effects - тестирование получается следующее
- дадим известное состояние + данные на вход
- проверим, что получили на выходе правильные данные + новое состояние
когда убедились, что эти все части работают нормально -- существенно легче отлаживать код, который их связывает и реально порождает side effects - либо он читаемый и понятный (и там почти невозможно ошибиться), либо он достаточно простой, чтоб его изолировать и протестироваь отдельно.
а подход MVC - он порождает много костылей все-таки :)
Reply
Наверное, надо просто найти золотую середину и придерживаться ее. Ну и, конечно, читать маны отладчика :)
Reply
понятно :) я смотрю с точки зрения целесообразности бизнеса и получения конечного продукта -- и пофиг на чем писать, лишь бы получать работающий код _быстро_. и скорость реализации здесь существенно важнее производительности программы или аппаратхынх требований :)
ты смотришь с точки зрения программиста - 'как бы так красиво разойтись и сделать Архитектуру' :))))
поэтому и разные точки зрения :)
Reply
Leave a comment