powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Как защитить код
25 сообщений из 76, страница 1 из 4
Как защитить код
    #39869997
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

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

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

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

как делать?

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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


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

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

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

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

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

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

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

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



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

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

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

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

как делать?

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

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


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

Все. Баста. Решение на 0.001 story point.
ща мода пошла у некоторых не писать вообще принципиально никаких комментов по коду. потому что мартин так в своей книжке чистый код сказал. ))) у узбеков есть поговорка - попроси принести тюбетейку - они тебе принесут тюбетейку вместе с головой.
...
Рейтинг: 0 / 0
Как защитить код
    #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
Как защитить код
    #39870126
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTне писать вообще принципиально никаких комментов по коду. потому что мартин так в своей книжке чистый код сказал
Мартин ничего не говорил про "не писать принципиально"
авторTherefore, though comments are sometimes necessary, we will expend significant energy to minimize them.


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


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

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


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