|
Как защитить код
|
|||
---|---|---|---|
#18+
Добрый день. Тут делал ревью кода и обрати внимание что Senjor Java Developer - взял и снял аннотация @Transaction с ряда методов, сначала подумал что рефакторинг, потом понял что просто ошибка, аннотации вернул. Но вопрос остался как защитить код от таких изменений? Поведение должно быть такое если аннотации сняли - код должен не собираться, падать , делать все чтобы он не попал в продакшен. как делать? Любые идеи, подойдут. Может есть какая идея, плагин ? Спасибо . ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 14:53 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
как простой пример всем понятный в связях One-to-many - Parent --- Set<Child> делать метод Set<Child> getChilds(){ return Collections.unmodifiableSet(childs); } чтобы исключить добавление через add коллекции , а для добавления создавать отдельный метод А на уровне декларативного кода что-то такое можно придумать ? может тест хитрый написать ?? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 14:53 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
Atum1, Написать тесты на spring-test ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 14:56 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
переходить на Scala и ФП) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 15:06 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
Именно поэтому я не люблю спринг, и всякую эту контейнерную шалаболду. По сути аннотации - это нетипизированный DSL внутри Java-приложения, факстически ни чем не отличаясь от какого-нибудь javascript. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 15:08 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
в любом случае у нас внутри код, который должен выполниться в одной транзакции - это и надо тестировать. а уж как это достигается, с помощью Transactional или условных beginTransaction/commitTransaction - дело третье. При определенном везении Transactional и вовсе не будет работать, так что его наличие или даже отсутствие ни о чем не говорит забыл никэто нетипизированный DSL внутри Java-приложения, факстически ни чем не отличаясь от какого-нибудь javascriptэто про Transactional или про return "redirect:/showresult/${id}" из соседнего топика? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 15:21 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
chpasha забыл никэто нетипизированный DSL внутри Java-приложения, факстически ни чем не отличаясь от какого-нибудь javascriptэто про Transactional или про return "redirect:/showresult/${id}" из соседнего топика? И про то и про другое. Хотя первоначально имелись ввиду любые runtime-аннотации ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 15:32 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
Atum1, тесты надо написать, что падают, если сняли анотацию @Transaction и выполнять эти тесты на ветке перед мёржем и если они упали, то запрещать мёрж ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 15:50 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
забыл никИменно поэтому я не люблю спринг, и всякую эту контейнерную шалаболду. По сути аннотации - это нетипизированный DSL внутри Java-приложения, факстически ни чем не отличаясь от какого-нибудь javascript.да. Но жто декларативное управление транзакциями. Мейнстрим счас. Куда деваться. Аффтар! — показать ему что упало когда он снял аннотацию. - с разрешения руководства писать тесты на транзакции. Он ведь мог и connection.beginTran не написать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 15:57 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
Atum1, ты входишь в опасный виток разработки тестов когда сложность тестирования может превышать полученный полезный эффект. Если у тебя есть тесты которые закрепляют бизнес логику - то они должны работать. Если на @Transaction нельзя написать модульные ... интеграционные или performance тесты - то возможно они .... не нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 16:01 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
Atum1, ща насоветуют дичи... все уже давно изобретено: Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 16:06 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
maytonможет превышать полученный полезный эффект. особенно когда окажется, что Senior поудалял там аннотации не по ошибке ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 16:08 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
Андрей ПанфиловAtum1, ща насоветуют дичи... все уже давно изобретено: Код: java 1. 2. 3.
Которое также легко удаляется пьяным сеньором ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 16:13 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
PetroNotC Sharpзабыл никИменно поэтому я не люблю спринг, и всякую эту контейнерную шалаболду. По сути аннотации - это нетипизированный DSL внутри Java-приложения, факстически ни чем не отличаясь от какого-нибудь javascript. Но жто декларативное управление транзакциями. Мейнстрим счас. Куда деваться. Есть куда деваться. Как раз вот статья вышла хорошая, но это нужно иметь кое-какие знания о ФП чтобы понять. Тыц Это конечно не совет автору все переписывать с нуля - просто чтоб знал как бывает иначе ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 16:18 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
Я-бы ограничился обычным каментом. Типа - "Перед тем как удалять - хорошо подумай. Если все таки решил удалять подойди к Atum и спроси разрешения". Все. Баста. Решение на 0.001 story point. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 16:21 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
Андрей ПанфиловAtum1, ща насоветуют дичи... все уже давно изобретено: Код: java 1. 2. 3.
Такая проверка в рантайме, если код сломан уже ничего не даст. Процесс ревью кода может помочь. А лучше иметь интеграционные или приемочные тесты. Но тут насколько есть ресурсы на написание таких тестов. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 16:33 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
забыл никЕсть куда деваться. Как раз вот статья вышла хорошая, но это нужно иметь кое-какие знания о ФП чтобы понять. Тыц Чет там какой-то обман кмк. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
При этом у автора претензия: авторLack of precision. Without looking at the code in its entirety, we can’t be sure where transactions exactly begin and commit. An @Transactional method might define the transaction boundary, or might take part in a broader transaction. It’s not possible to differentiate between these two scenarios. Вот как смотря в код sendEmail я могу понять в транзакции он будет выполняться или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 16:58 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
забыл никАндрей ПанфиловAtum1, ща насоветуют дичи... все уже давно изобретено: Код: java 1. 2. 3.
Которое также легко удаляется пьяным сеньорома зачем удалять? У нас же нет контракта вида "где-то должны стоять аннотации", а есть контракт вида "этот метод требует выполнения в транзакции", соответственно assert прекрасно этот контракт обеспечивает и никакие дополнительные тесты писать не нужно, достаточно то что есть (если конечно есть) запускать с -ea ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 17:03 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
Андрей Панфилова зачем удалять? сеньор-то - пьяный. а в коде на Scala он и трезвый побоится удалять, разве что все скопом ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 17:09 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
Atum1Добрый день. Тут делал ревью кода и обрати внимание что Senjor Java Developer - взял и снял аннотация @Transaction с ряда методов, сначала подумал что рефакторинг, потом понял что просто ошибка, аннотации вернул. Но вопрос остался как защитить код от таких изменений? Поведение должно быть такое если аннотации сняли - код должен не собираться, падать , делать все чтобы он не попал в продакшен. как делать? Любые идеи, подойдут. Может есть какая идея, плагин ? Спасибо . поведение кода закрепляют тесты. ответ - надо покрыть код тестами. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 17:15 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
PetroNotC Sharpзабыл никИменно поэтому я не люблю спринг, и всякую эту контейнерную шалаболду. По сути аннотации - это нетипизированный DSL внутри Java-приложения, факстически ни чем не отличаясь от какого-нибудь javascript.да. Но жто декларативное управление транзакциями. Мейнстрим счас. Куда деваться. Аффтар! — показать ему что упало когда он снял аннотацию. - с разрешения руководства писать тесты на транзакции. Он ведь мог и connection.beginTran не написать. в модном слике никаких аннотаций транзакций нет (а жаль!) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 17:16 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
maytonЯ-бы ограничился обычным каментом. Типа - "Перед тем как удалять - хорошо подумай. Если все таки решил удалять подойди к Atum и спроси разрешения". Все. Баста. Решение на 0.001 story point. ща мода пошла у некоторых не писать вообще принципиально никаких комментов по коду. потому что мартин так в своей книжке чистый код сказал. ))) у узбеков есть поговорка - попроси принести тюбетейку - они тебе принесут тюбетейку вместе с головой. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 17:19 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
Андрей Панфилов Код: java 1. 2.
Вот как смотря в код sendEmail я могу понять в транзакции он будет выполняться или нет? Никак, но в этом и весь цимус, что вам это и не надо. sendEmail - утилитная функция, которую можно вызвать как с транзакции так и вне, ее тип просто говорит что это IO - то есть некий сайд эффект. Когда же ты делаешь композицию функций, а-ля insertToDb.flatMap(_ => sendEmail) - тип это выражения уже Coneection[A] - то есть нечто что будет выполнено только если ему предоставить коннекшен. А чтобы выполнить ConnectionIO - ты обязан предоставить Transactor, иначе не скомпилируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 17:23 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
andreykaTне писать вообще принципиально никаких комментов по коду. потому что мартин так в своей книжке чистый код сказал Мартин ничего не говорил про "не писать принципиально" авторTherefore, though comments are sometimes necessary, we will expend significant energy to minimize them. Узбекская поговорка это только подтверждает ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 17:25 |
|
Как защитить код
|
|||
---|---|---|---|
#18+
Андрей Панфиловзабыл никпропущено... Которое также легко удаляется пьяным сеньорома зачем удалять? У нас же нет контракта вида "где-то должны стоять аннотации", а есть контракт вида "этот метод требует выполнения в транзакции", соответственно assert прекрасно этот контракт обеспечивает и никакие дополнительные тесты писать не нужно, достаточно то что есть (если конечно есть) запускать с -ea Убедил, но проблема того что это детектится лишь в рантайме - остается, хотя лучше чем было ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 17:25 |
|
|
start [/forum/topic.php?fid=59&msg=39870108&tid=2121090]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
181ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 304ms |
0 / 0 |