Mar. 2nd, 2012
расчистка завалов
Mar. 2nd, 2012 11:15 pmЯ тут некоторое время назад перефакторил один api, поменяв все optional nulls на Either. Ну и там в лифтовом коде всякие джойны понаписал.
Но непривыкший к монадам коллега решил упростить, и написал слой, где всё это джойнится и сливается, и если что и случилось на сервере, то мы и не узнаем, а получим null, который в одном интересном контексте загадочно превращается в байт 0, каковой и возвращается.
Вчерась я с гордостью закоммитил все свои тесты - но на билд машине семь тестов не шло. Как утром оказалось, ровно в тот же момент, между моим слиянием и моим коммитом, коллега вставил в другой сервер ещё одну полезную проверочку, в результате которой все мои тест-кейсы должны были рушиться, но хм, они рухали не сразу, а сначала получали от сервера ответ "всё отлично!", а потом уже проверяли и таки рушились. Потому что сервер-то возвращал ошибку, но "no error layer" эту ошибку успешно забывал.
А у меня сверху ещё слой, который делает транзакцию в стиле cps, и я, не разобравшись, положился на этот "no error layer".
Ну вот, и сегодня, увидев, что там за херня, переписал всё на Either (особое затруднение вызвал вариант, где если ошибки нет, то ничего возвращать не надо - я даже хотел c
_navi_ советоваться, шо це за монада, inverse option, но потом дошло до меня, что это просто Either[Fuckedup, Unit], ну и всё. И надо употреблять Either.rightJoin, и всё замечательно.
Ну про джойны и аппликативы это я должен завтра написать.
Но непривыкший к монадам коллега решил упростить, и написал слой, где всё это джойнится и сливается, и если что и случилось на сервере, то мы и не узнаем, а получим null, который в одном интересном контексте загадочно превращается в байт 0, каковой и возвращается.
Вчерась я с гордостью закоммитил все свои тесты - но на билд машине семь тестов не шло. Как утром оказалось, ровно в тот же момент, между моим слиянием и моим коммитом, коллега вставил в другой сервер ещё одну полезную проверочку, в результате которой все мои тест-кейсы должны были рушиться, но хм, они рухали не сразу, а сначала получали от сервера ответ "всё отлично!", а потом уже проверяли и таки рушились. Потому что сервер-то возвращал ошибку, но "no error layer" эту ошибку успешно забывал.
А у меня сверху ещё слой, который делает транзакцию в стиле cps, и я, не разобравшись, положился на этот "no error layer".
Ну вот, и сегодня, увидев, что там за херня, переписал всё на Either (особое затруднение вызвал вариант, где если ошибки нет, то ничего возвращать не надо - я даже хотел c
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Ну про джойны и аппликативы это я должен завтра написать.