Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / Как защитить код / 25 сообщений из 76, страница 1 из 4
01.10.2019, 14:53
    #39869997
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Добрый день.

Тут делал ревью кода и обрати внимание что Senjor Java Developer - взял и снял аннотация @Transaction с ряда методов,
сначала подумал что рефакторинг, потом понял что просто ошибка, аннотации вернул.

Но вопрос остался как защитить код от таких изменений?

Поведение должно быть такое если аннотации сняли - код должен не собираться, падать , делать все чтобы он не попал в продакшен.

как делать?

Любые идеи, подойдут.

Может есть какая идея, плагин ?


Спасибо .
...
Рейтинг: 0 / 0
01.10.2019, 14:53
    #39869998
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
как простой пример всем понятный

в связях One-to-many - Parent --- Set<Child> делать метод

Set<Child> getChilds(){
return Collections.unmodifiableSet(childs);
}

чтобы исключить добавление через add коллекции , а для добавления создавать отдельный метод

А на уровне декларативного кода что-то такое можно придумать ?

может тест хитрый написать ??
...
Рейтинг: 0 / 0
01.10.2019, 14:56
    #39870001
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Atum1,

Написать тесты на spring-test
...
Рейтинг: 0 / 0
01.10.2019, 15:06
    #39870007
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
переходить на Scala и ФП)
...
Рейтинг: 0 / 0
01.10.2019, 15:08
    #39870009
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Именно поэтому я не люблю спринг, и всякую эту контейнерную шалаболду. По сути аннотации - это нетипизированный DSL внутри Java-приложения, факстически ни чем не отличаясь от какого-нибудь javascript.
...
Рейтинг: 0 / 0
01.10.2019, 15:21
    #39870019
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
в любом случае у нас внутри код, который должен выполниться в одной транзакции - это и надо тестировать. а уж как это достигается, с помощью Transactional или условных beginTransaction/commitTransaction - дело третье. При определенном везении Transactional и вовсе не будет работать, так что его наличие или даже отсутствие ни о чем не говорит

забыл никэто нетипизированный DSL внутри Java-приложения, факстически ни чем не отличаясь от какого-нибудь javascriptэто про Transactional или про return "redirect:/showresult/${id}" из соседнего топика?
...
Рейтинг: 0 / 0
01.10.2019, 15:32
    #39870032
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
chpasha
забыл никэто нетипизированный DSL внутри Java-приложения, факстически ни чем не отличаясь от какого-нибудь javascriptэто про Transactional или про return "redirect:/showresult/${id}" из соседнего топика?

И про то и про другое. Хотя первоначально имелись ввиду любые runtime-аннотации
...
Рейтинг: 0 / 0
01.10.2019, 15:50
    #39870050
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Atum1,

тесты надо написать, что падают, если сняли анотацию @Transaction
и выполнять эти тесты на ветке перед мёржем
и если они упали, то запрещать мёрж
...
Рейтинг: 0 / 0
01.10.2019, 15:57
    #39870056
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
забыл никИменно поэтому я не люблю спринг, и всякую эту контейнерную шалаболду. По сути аннотации - это нетипизированный DSL внутри Java-приложения, факстически ни чем не отличаясь от какого-нибудь javascript.да.
Но жто декларативное управление транзакциями. Мейнстрим счас. Куда деваться.
Аффтар!
— показать ему что упало когда он снял аннотацию.
- с разрешения руководства писать тесты на транзакции.
Он ведь мог и
connection.beginTran
не написать.
...
Рейтинг: 0 / 0
01.10.2019, 16:01
    #39870057
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Atum1,

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

Если у тебя есть тесты которые закрепляют бизнес логику - то они должны работать.

Если на @Transaction нельзя написать модульные ... интеграционные или performance
тесты - то возможно они .... не нужны.
...
Рейтинг: 0 / 0
01.10.2019, 16:06
    #39870061
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Atum1,

ща насоветуют дичи... все уже давно изобретено:

Код: java
1.
2.
3.
protected void myImportantMethod() {
	assert txService.isActive();
}
...
Рейтинг: 0 / 0
01.10.2019, 16:08
    #39870062
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
maytonможет превышать полученный полезный эффект.
особенно когда окажется, что Senior поудалял там аннотации не по ошибке
...
Рейтинг: 0 / 0
01.10.2019, 16:13
    #39870066
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Андрей ПанфиловAtum1,

ща насоветуют дичи... все уже давно изобретено:

Код: java
1.
2.
3.
protected void myImportantMethod() {
	assert txService.isActive();
}



Которое также легко удаляется пьяным сеньором
...
Рейтинг: 0 / 0
01.10.2019, 16:18
    #39870070
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
PetroNotC Sharpзабыл никИменно поэтому я не люблю спринг, и всякую эту контейнерную шалаболду. По сути аннотации - это нетипизированный DSL внутри Java-приложения, факстически ни чем не отличаясь от какого-нибудь javascript.
Но жто декларативное управление транзакциями. Мейнстрим счас. Куда деваться.


Есть куда деваться. Как раз вот статья вышла хорошая, но это нужно иметь кое-какие знания о ФП чтобы понять.
Тыц

Это конечно не совет автору все переписывать с нуля - просто чтоб знал как бывает иначе
...
Рейтинг: 0 / 0
01.10.2019, 16:21
    #39870077
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Я-бы ограничился обычным каментом. Типа - "Перед тем как удалять - хорошо подумай. Если все таки решил удалять подойди
к Atum и спроси разрешения".

Все. Баста. Решение на 0.001 story point.
...
Рейтинг: 0 / 0
01.10.2019, 16:33
    #39870082
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Андрей ПанфиловAtum1,

ща насоветуют дичи... все уже давно изобретено:

Код: java
1.
2.
3.
protected void myImportantMethod() {
	assert txService.isActive();
}

Такая проверка в рантайме, если код сломан уже ничего не даст. Процесс ревью кода может помочь. А лучше иметь интеграционные или приемочные тесты. Но тут насколько есть ресурсы на написание таких тестов.
...
Рейтинг: 0 / 0
01.10.2019, 16:58
    #39870108
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
забыл никЕсть куда деваться. Как раз вот статья вышла хорошая, но это нужно иметь кое-какие знания о ФП чтобы понять.
Тыц Чет там какой-то обман кмк.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
// Re-useable effect descriptions
val sendEmail: IO[Unit] = IO(println("Sending email"))
val insertUser: ConnectionIO[Int] = 
  sql"INSERT INTO users(name, email) VALUES('Emily', 'emily@email.com')"
    .update.run

// (1)  BEGIN; INSERT; sendEmail(); COMMIT;
val insertThenSend: ConnectionIO[Unit] =
  insertUser.flatMap(_ => sendEmail.to[ConnectionIO])
  
val result1: IO[Unit] = insertThenSend.transact(transactor)



При этом у автора претензия:

автор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 я могу понять в транзакции он будет выполняться или нет?
...
Рейтинг: 0 / 0
01.10.2019, 17:03
    #39870113
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
забыл никАндрей ПанфиловAtum1,

ща насоветуют дичи... все уже давно изобретено:

Код: java
1.
2.
3.
protected void myImportantMethod() {
	assert txService.isActive();
}



Которое также легко удаляется пьяным сеньорома зачем удалять? У нас же нет контракта вида "где-то должны стоять аннотации", а есть контракт вида "этот метод требует выполнения в транзакции", соответственно assert прекрасно этот контракт обеспечивает и никакие дополнительные тесты писать не нужно, достаточно то что есть (если конечно есть) запускать с -ea
...
Рейтинг: 0 / 0
01.10.2019, 17:09
    #39870116
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Андрей Панфилова зачем удалять?
сеньор-то - пьяный. а в коде на Scala он и трезвый побоится удалять, разве что все скопом ;)
...
Рейтинг: 0 / 0
01.10.2019, 17:15
    #39870118
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Atum1Добрый день.

Тут делал ревью кода и обрати внимание что Senjor Java Developer - взял и снял аннотация @Transaction с ряда методов,
сначала подумал что рефакторинг, потом понял что просто ошибка, аннотации вернул.

Но вопрос остался как защитить код от таких изменений?

Поведение должно быть такое если аннотации сняли - код должен не собираться, падать , делать все чтобы он не попал в продакшен.

как делать?

Любые идеи, подойдут.

Может есть какая идея, плагин ?


Спасибо .
поведение кода закрепляют тесты. ответ - надо покрыть код тестами.
...
Рейтинг: 0 / 0
01.10.2019, 17:16
    #39870120
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
PetroNotC Sharpзабыл никИменно поэтому я не люблю спринг, и всякую эту контейнерную шалаболду. По сути аннотации - это нетипизированный DSL внутри Java-приложения, факстически ни чем не отличаясь от какого-нибудь javascript.да.
Но жто декларативное управление транзакциями. Мейнстрим счас. Куда деваться.
Аффтар!
— показать ему что упало когда он снял аннотацию.
- с разрешения руководства писать тесты на транзакции.
Он ведь мог и
connection.beginTran
не написать.
в модном слике никаких аннотаций транзакций нет (а жаль!)
...
Рейтинг: 0 / 0
01.10.2019, 17:19
    #39870121
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
maytonЯ-бы ограничился обычным каментом. Типа - "Перед тем как удалять - хорошо подумай. Если все таки решил удалять подойди
к Atum и спроси разрешения".

Все. Баста. Решение на 0.001 story point.
ща мода пошла у некоторых не писать вообще принципиально никаких комментов по коду. потому что мартин так в своей книжке чистый код сказал. ))) у узбеков есть поговорка - попроси принести тюбетейку - они тебе принесут тюбетейку вместе с головой.
...
Рейтинг: 0 / 0
01.10.2019, 17:23
    #39870124
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Андрей Панфилов
Код: java
1.
2.
// Re-useable effect descriptions
val sendEmail: IO[Unit] = IO(println("Sending email"))



Вот как смотря в код sendEmail я могу понять в транзакции он будет выполняться или нет?

Никак, но в этом и весь цимус, что вам это и не надо.
sendEmail - утилитная функция, которую можно вызвать как с транзакции так и вне, ее тип просто говорит что это IO - то есть некий сайд эффект.
Когда же ты делаешь композицию функций, а-ля insertToDb.flatMap(_ => sendEmail) - тип это выражения уже Coneection[A] - то есть нечто что будет выполнено только если ему предоставить коннекшен. А чтобы выполнить ConnectionIO - ты обязан предоставить Transactor, иначе не скомпилируется.
...
Рейтинг: 0 / 0
01.10.2019, 17:25
    #39870126
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
andreykaTне писать вообще принципиально никаких комментов по коду. потому что мартин так в своей книжке чистый код сказал
Мартин ничего не говорил про "не писать принципиально"
авторTherefore, though comments are sometimes necessary, we will expend significant energy to minimize them.


Узбекская поговорка это только подтверждает ;)
...
Рейтинг: 0 / 0
01.10.2019, 17:25
    #39870127
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как защитить код
Андрей Панфиловзабыл никпропущено...


Которое также легко удаляется пьяным сеньорома зачем удалять? У нас же нет контракта вида "где-то должны стоять аннотации", а есть контракт вида "этот метод требует выполнения в транзакции", соответственно assert прекрасно этот контракт обеспечивает и никакие дополнительные тесты писать не нужно, достаточно то что есть (если конечно есть) запускать с -ea

Убедил, но проблема того что это детектится лишь в рантайме - остается, хотя лучше чем было
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как защитить код / 25 сообщений из 76, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]