|
Код в конструкторе
|
|||
---|---|---|---|
#18+
PetroNotC Sharp kealon(Ruslan) что мешает сделать и так, и так? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 10:59 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
kealon(Ruslan), Чтобы новичОк морщил лоб что лучше при подсказке в IDE? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 11:04 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
Для корпоратива, код должен быть простой,.... и понятный, читабельный и короткий. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 11:13 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
1) Создание объекта должно быть атомарным и созданный объект должен быть гарантированно готовым к использованию, поэтому забудьте про ваши пахнущие нафталином init, open и т.д, потому что их легко забыть вызвать. Поэтому единственно правильный метод создания такого объекта - внешняя функция, которая либо вернёт готовый объект либо вернёт ошибку. 2) есть 4 распространенных стратегии как возвращать ошибку. А) код возврата - ну это давно дискредитировавшая себя идея, так что идём дальше 2) uncheked exception - код становится проще, но оно может проползти через много слоев кода и вылезти там где не ждёшь. Ацтой 3) unchecked exception. Уже лучше, нельзя не обработать, но добавляет лишний код, разрабы склонны просто глушить их ну и вообще это такой неочевидный goto 4) вернуть Either<Reader, Error> который указывает что результатом функции может быть либо объект либо ошибка и прогеру надо обработать оба кейса, и при этом не ломается последовательный флоу. К сожалению в java нету хорошего either, поэтому варианты с optional и кидагием uncheked для меня выглядят наилучшими, кому как нравится Поэтому, повторяю, проблема решается через Статик метод, который называется smart constructor и он либо кидает анчекед либо опшилнал ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 11:36 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
забыл ник Поэтому единственно правильный метод ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 11:52 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
PetroNotC Sharp kealon(Ruslan), Чтобы новичОк морщил лоб что лучше при подсказке в IDE? очевидность в таком случае больше страдает, как бы всё таки странно "делать два вызова вместо одного" PetroNotC Sharp kealon(Ruslan), Это в плюсах 30 вариантов конструкторов)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 13:11 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
kealon(Ruslan), Очевидность это в конструкторе сделал инициализацию 20 обычных полей типа class A { int x = 12*30 .... и потом вызвал Бизнес логику отдельным методом. initFromStream... initFromHttp ... А то как то узко получается делать 5 initXXX и 5 конструкторов ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 13:36 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, то что в Java это неудобно делать - это конечно фактор от которого приходится прыгать ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 16:34 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
kealon(Ruslan), Мое имхо что это неудобно также в дельфи, шарпе и плюсах ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 16:57 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, в дельфи, с конструктором, это я точно могу сказать, особо проблем нет - фактически там вызов конструктора это целый комбайн, который реализует "фабрику классов". Там другие проблемы: стандартные библиотеки и интерфейсы между креслом и компьютером. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 20:04 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
kealon(Ruslan), Ну дак я делал там 3 конструктора объекта. И все работало. ob.Create(путьКсубд) А когда шеф сказал что нужно в меню Отсоединится от Бд и присоединится к бд без перезапуска (не убивая объект) то переделал с конструктора на ob.init(путьКсубд) Просто это удобнее чем убивать))) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 20:22 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
Вообще непонятна проблема топика. Посмотрите как OpenJDK реализует классы java.io.* Есть там логика в конструкторах и исключения они бросают. Может в топике надо обсудить шаблоны типа фабрика или фабричный метод? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 00:09 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
mayton, Пошучу как kealon .. Так то - боги)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 07:46 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
PetroNotC Sharp kealon(Ruslan), Ну дак я делал там 3 конструктора объекта. И все работало. ob.Create(путьКсубд) А когда шеф сказал что нужно в меню Отсоединится от Бд и присоединится к бд без перезапуска (не убивая объект) то переделал с конструктора на ob.init(путьКсубд) Просто это удобнее чем убивать))) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 08:31 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
mayton Может в топике надо обсудить шаблоны типа фабрика или фабричный метод? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 08:37 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
kealon(Ruslan), Можно конечно. Но я привык так, если на предметах в комнате скапливается пыль, то предмет не нужен. Ну ты понял. Если никто не использует тот конструктор (я же выше показал что неудобно) то это лишний код. Я против универсальности и универсального класса которого имеем во всех позициях)) Ну или второй пример. Когда файл выделяешь и нажимаешь копировать или переместить ты звдумываешься? Вот и я нажал в IDE F6 а не F5 )) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 09:29 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
Бывают более раздражающие кейсы. Например вам надо быстро протестировать бизнес-логику в юнит-тестах но .. бизнес-объект вы просто так не можете создать. У него нет дефолтного конструктора. Есть конструктор с параметром который тоже хрен создашь по той-же причине. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 10:11 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
mayton Бывают более раздражающие кейсы. Например вам надо быстро протестировать бизнес-логику в юнит-тестах но .. бизнес-объект вы просто так не можете создать. У него нет дефолтного конструктора. Есть конструктор с параметром который тоже хрен создашь по той-же причине. Если речь о Легаси - да. Новый код такого качества не должен пройти дальше пулл реквеста ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 10:50 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
забыл ник mayton Бывают более раздражающие кейсы. Например вам надо быстро протестировать бизнес-логику в юнит-тестах но .. бизнес-объект вы просто так не можете создать. У него нет дефолтного конструктора. Есть конструктор с параметром который тоже хрен создашь по той-же причине. Если речь о Легаси - да. Новый код такого качества не должен пройти дальше пулл реквеста Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 11:15 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
mayton, Да. Согласен. И даже уже обсуждали это в форуме. Это уже особенности мокания, бинов, внедрения классов и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 11:20 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
Если посмотреть на Apache Lucene - таки да. Там много объектов движка создаются не через конструкторы а через методы фабрик. Это для ядро. Это pure-java и никто не будет их заворачивать в бины или ORM сущности. Тоесть как-бы идет условное разделение на обще-системные и прикладные (бизнесовые) библиотеки. И когда я ворчал по поводу тестированя - я какраз имел в виду бизнес-код в котором программист просто шутки ради или начитавшись умной литературы просто забрал у меня обычный конструктор. И теперь надо задаскивать Mockito. Библиотеку которую я считаю совершенно ненужным шлаком да и нарушающей законы инкапсуляции. Вобщем в борьбе брони и снаряда никто не побеждает но мы увеличиваем эстимации решаемых тасок. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 11:25 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
mayton, Опять согласен. Так как ты еще помнишь обычное программирование java. Десктоп. Потом java в веб ушло. Тут непустой конструктор нафиг не нужно. Тут и ООП не нужен)) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 11:28 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
Я в последнее время стал писать каменты в пустых конструкторах. Код: java 1. 2. 3. 4. 5. 6. 7.
Это чтоб шаловливый другой кодер не переделал дефолтный в конструктор с параметром. Пускай новый создаст. Смысл по сути такой-же как и в каментах в секции default: Чтоб акцентировать что мы ситуацию контролируем а не просто что-то механически вписали. P.S. Java иногда умеет замылить глаза бойлерплейтом. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 15:52 |
|
Код в конструкторе
|
|||
---|---|---|---|
#18+
PetroNotC Sharp kealon(Ruslan), Можно конечно. Но я привык так, если на предметах в комнате скапливается пыль, то предмет не нужен. Ну ты понял. Если никто не использует тот конструктор (я же выше показал что неудобно) то это лишний код. Я против универсальности и универсального класса которого имеем во всех позициях)) Ну или второй пример. Когда файл выделяешь и нажимаешь копировать или переместить ты звдумываешься? Вот и я нажал в IDE F6 а не F5 )) авторА когда шеф сказал что нужно в меню Отсоединится от Бд и присоединится к бд без перезапуска (не убивая объект) то переделал с конструктора на ob.init(путьКсубд) Просто это удобнее чем убивать)))на основании какой метрики шеф сделал этот вывод? почему конкретный случай стал квантором всеобщности? с любой стороны как ни погляди, но "два вызова вместо одного" - это явно лишний код :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 21:01 |
|
|
start [/forum/topic.php?fid=59&msg=40010142&tid=2120650]: |
0ms |
get settings: |
26ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
464ms |
get tp. blocked users: |
1ms |
others: | 305ms |
total: | 870ms |
0 / 0 |