|
|
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
Вопрос на самом деле не такой банальный. Надо создать объект и инициализировать разные там свойства. Самое тупое конструктор с параметрами. Но тут такой минус что сегодня параметров 3, а завтра 20. Если не 50. Это как-то ужасно. Есть еще шаблон Builder. Он клевый. Но с ним проблема в том, что можно забыть что-то инициализировать. А куча параметров должны быть обязательные. Можно конечно кидать эксепшн на рантайме, но как-то это не очень. Хочется в идеале проверку на этапе компиляции. Да, конструктор не гарантирует что ему не передадут null. Но он хотя бы гарантирует, что передадут хоть что-то. Можно как-то извратиться чтоб всё было как хочется ? PS. Язык не важен, для примера можно взять Java или С# ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2016, 19:34 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
grok, Dependency Injection контейнер спасёт отца русской демократии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2016, 20:15 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
Изопропилgrok, Dependency Injection контейнер спасёт отца русской демократии. подробнее можно ? совсем хорошо если с примером ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2016, 20:42 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
grokМожно как-то извратиться чтоб всё было как хочется? А как хочется-то? Оставить 3 параметра в конструкторе? Фабрика не решает Вашей проблемы? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2016, 21:11 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
skyANAgrokМожно как-то извратиться чтоб всё было как хочется? А как хочется-то? Оставить 3 параметра в конструкторе? Фабрика не решает Вашей проблемы? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. в целом не решает параметры/свойства часто не делятся на какие-то осмысленные группы, ну или делить неудобно простой пример объект имеет штуки 3 разных наименования, штук 5 дат, да и еще десяток флажков (boolean) и это не считая прочего что может быть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2016, 21:36 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
grok, Ну, например, конструктор, который принимает абстрактный класс с конфигурацией public MyObject(MyObjectAbstractConfig config) Пока все нужные методы конфига не реализуешь - не скомпилируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2016, 08:05 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
grokskyANAпропущено... А как хочется-то? Оставить 3 параметра в конструкторе? Фабрика не решает Вашей проблемы? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. в целом не решает параметры/свойства часто не делятся на какие-то осмысленные группы, ну или делить неудобно простой пример объект имеет штуки 3 разных наименования, штук 5 дат, да и еще десяток флажков (boolean) и это не считая прочего что может быть Предположительно, это результат плохого проектирования. Я бы переделал все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2016, 09:21 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
Я не знаю как там в шарпе, но в джаве можно попробовать обвесить метоты билдера кастомными аннотациями и обработать через плагин компилятора (javac specific). Если интересно, то можно начать изучать тему по ссылкам с этого ответа . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 12:33 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
grokСамое тупое конструктор с параметрами. Но тут такой минус что сегодня параметров 3, а завтра 20. Если не 50.Перегруженные конструкторы? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 12:37 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
Как-то сумбурно. И много требований. grokНадо создать объект и инициализировать разные там свойства. Самое тупое конструктор с параметрами. Но тут такой минус что сегодня параметров 3, а завтра 20. Если не 50. Это как-то ужасно. Конструкторы с жестким списком параметров - это проблемы Java/C#. Для Кotlin к примеру конструктор как элемент language уже не нужен. Пример: Код: java 1. 2. 3. 4. 5. 6. В Scala кажется тоже самое. Есть еще шаблон Builder. Он клевый. Но с ним проблема в том, что можно забыть что-то инициализировать. А куча параметров должны быть обязательные. Можно конечно кидать эксепшн на рантайме, но как-то это не очень. Хочется в идеале проверку на этапе компиляции. Где-то я видел такой билдер. Ну там часть параметров - required - а часть - опциональны. Код: java 1. 2. 3. 4. Да, конструктор не гарантирует что ему не передадут null. Но он хотя бы гарантирует, что передадут хоть что-то. Можно как-то извратиться чтоб всё было как хочется ? Для статической проверки (на дурака) можешь заюзать такие себе симпотичные контракты Код: java 1. 2. 3. 4. 5. И если на фазе редактирования кода среда увидит что ты сморозил херню - то красным фломастером подсветит исходник. Откуда импорт - я не помню щас. Но они есть в разных либах и вт.ч. от призводителя Jetbrains. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 13:42 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
А ну я в билдере немного ошибся. Вот как тут надо https://ru.wikipedia.org/wiki/Строитель_(шаблон_проектирования)#Java Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 13:45 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
Можно еще генерализировать конструктор под списки свойств. Код: java 1. 2. 3. 4. 5. 6. Далее в коснтрукторе надо как-то хитро заюзать толи BeanUtils толи еще другую либо чтобы через рефлексию сеттить все свойства. Да по поводу эксепшен. Лучше не бросай Runtime. Лучше свой создать. Так будет легче делать разбор полетов. И логи ошибок более осмысленные будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 13:51 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
grokskyANAпропущено... А как хочется-то? Оставить 3 параметра в конструкторе? Фабрика не решает Вашей проблемы? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. в целом не решает параметры/свойства часто не делятся на какие-то осмысленные группы, ну или делить неудобно простой пример объект имеет штуки 3 разных наименования, штук 5 дат, да и еще десяток флажков (boolean) и это не считая прочего что может быть может имеет смысла рассматирвать не свойства , а операции со свойствами ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 19:37 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
grok Самое тупое конструктор с параметрами. Но тут такой минус что сегодня параметров 3, а завтра 20. Если не 50. Это как-то ужасно. 50 параметров - это уже неправильный обьект, скорее всего собирает в себе функционал нескольких разных классов. Обьект инициализируется конструктором где валидируются параметры и мы всегда имеем гарантию что обьект валидный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 06:36 |
|
||
|
Как создать объект
|
|||
|---|---|---|---|
|
#18+
stenfordgrokСамое тупое конструктор с параметрами. Но тут такой минус что сегодня параметров 3, а завтра 20. Если не 50. Это как-то ужасно. 50 параметров - это уже неправильный обьект, скорее всего собирает в себе функционал нескольких разных классов. Обьект инициализируется конструктором где валидируются параметры и мы всегда имеем гарантию что обьект валидный Полностью согласен что передача более чем 7 аргументов в метод - это некрасиво. Но если наш объект это entity из БД то там может быть и больше полей. А при инициализации такого толстого объекта не надо ставить задачу собственно инициализации. Более оптимиально - клонирование или протопипирование из других объектов которые уже созданы ранее. Или фабрика которая фабрикует уже объекты где 80% полей инициализрованы. А нам остаётся подправить оставшиеся 20%. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 10:57 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39271184&tid=1340665]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
146ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 479ms |

| 0 / 0 |
