- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
if($_POST['SESS_PARAM'] && $_POST['SESS_PARAM'] !='' && $_POST['SESS_PARAM_VALUE'] && $_POST['SESS_PARAM_VALUE'] !=''){
$_SESSION[$_POST['SESS_PARAM']] = $_POST['SESS_PARAM_VALUE'];
echo 'ok';
}else{
echo 'error';
}
MAKAKA 23.02.2021 23:31 # +1
Desktop 24.02.2021 00:02 # 0
hormand 24.02.2021 00:04 # 0
Desktop 24.02.2021 00:05 # 0
MAKAKA 24.02.2021 00:31 # 0
быстро скажи что-нить умное
Desktop 24.02.2021 02:10 # +2
это я узнал пароль от ракоучётки
почему-то он кажется подозрительно знакомым))
JloJle4Ka 24.02.2021 04:29 # 0
j123123 24.02.2021 07:49 # +4
6e3By3HbIu_nemyx 25.02.2021 23:30 # +1
MAKAKA 26.02.2021 01:18 # +1
JloJle4Ka 26.02.2021 03:47 # 0
bormand 26.02.2021 08:00 # 0
Какое аниме посоветуете?
JloJle4Ka 26.02.2021 08:16 # 0
Посоветываю: Naruto, Dragon Ball Z, Boruto: Naruto, Pokemon, One Piece, Boku no Pico.
bormand 26.02.2021 08:26 # +1
class Boruto: public Naruto
MAKAKA 26.02.2021 23:22 # 0
Потому что наследование ради реализации это пидорство?
j123123 26.02.2021 23:29 # 0
MAKAKA 26.02.2021 23:30 # 0
bormand 27.02.2021 01:27 # 0
guest6 27.02.2021 01:31 # 0
Но вообще отсутствие классов делает многие вещи проще
* проще делается ОРМ
* не нужно думать про вызовы деструкторов
Desktop 27.02.2021 02:55 # 0
guest6 27.02.2021 02:58 # 0
Desktop 27.02.2021 11:40 # +1
bormand 27.02.2021 14:44 # 0
MAKAKA 27.02.2021 14:47 # 0
bormand 27.02.2021 14:50 # 0
MAKAKA 27.02.2021 14:59 # +2
А вообще да: жабаскриптерские петушки пятьнадцать лет кукарекали нам о прелестях прототип-ориентированного ООП.
--у вас в JS нету классов
--ко-ко-ко, у нас есть прототипы, это намного лучше, ты просто не умеешь ими пользоваться
При этом в каждой библиотеке был свой способ наследования.
А потом в js завезли "class", и министерство правды сказало, что классы это хорошо.
И петушки развернулись на 180 градусов.
Такая же хуйня у скриптопитушков происходит со стат типизацией
Desktop 27.02.2021 15:02 # +2
bormand 27.02.2021 15:05 # +1
MAKAKA 27.02.2021 15:16 # +2
В жабе тоже есть finalize, а в C# finalize и ~, но когда они вызовутся, и вызовутся ли вообще -- этого никто не знает.
Для JVM Шипилёша вообще напилил такой GC, который никогда не вызывается. Сколько памяти сначала есть, столько и будет (забыл, как этот "GC" называется).
Так вот:
A FinalizationRegistry object lets you request a callback when an object is garbage-collected.
А когда? Когда рак на горе свиснет.
Ну и чтобы отсос был особенно полным, прямо на мозиле написано
A conforming JavaScript implementation, even one that does garbage collection, is not required to call cleanup callbacks.
MAKAKA 27.02.2021 15:05 # 0
трудно пройти мимо скриптоблядей, и не обоссать их. Сами понимаете..
Так вот. Деструкторы позволяют освобождать ресурсы детерменированно. В языках для анскильных обезъян (типа джавы, котлина и C#) деструкторов по сути нет, потому они пилят свои using, и closable disposable.
В то время как программисты на нормальных языках (типа C++) смотрят на них как на идиотов
Desktop 27.02.2021 15:07 # 0
MAKAKA 27.02.2021 15:22 # 0
JloJle4Ka 27.02.2021 15:07 # 0
bormand 27.02.2021 15:09 # +2
JloJle4Ka 27.02.2021 15:23 # 0
Desktop 27.02.2021 15:10 # 0
MAKAKA 27.02.2021 15:21 # 0
Ты создал объект, который отражает какую-то структуру в операционке (ну там GDI в винде или это слушающий сокет в классе, представляющем сервер)
В С++ можно каждый внешний ресурс обернуть в класс. Да, кода придется писать много (хотя бывают готовые шаблоны), но зато ты точно будешь знать, что кода объект умрет -- ресурс закроют.
А джавабляди вручную управляют ресурсами, как в сишечкеи
https://plugins.jetbrains.com/docs/intellij/disposers.html
Desktop 27.02.2021 15:24 # 0
MAKAKA 27.02.2021 15:29 # 0
Desktop 27.02.2021 15:34 # 0
bormand 27.02.2021 15:37 # 0
Ну, допустим, он нужен почти всё время работы программы, но не совсем всё. Поэтому внутри одной функции заточить его не получается.
Desktop 27.02.2021 15:41 # +1
имелись в виду конечно методы класса, иначе зачем там дырка? при чём конструкторы?
JloJle4Ka 27.02.2021 15:50 # 0
MAKAKA 27.02.2021 15:52 # +1
Вот на С++ у меня есть класс, в констркторе которого открывается сокет, а в десутркторе закрывается.
У него так же есть метод "послать в сокет говна".
Я создал объект класса, попользовался им сколько нужно, и он потом уничтожлился, и закрыл сокет.
Причем если я не дурак, и не пользовался new, то скорее всего он уничтожится сам (и сокет закроется)
как мне это сделать на жабе?
Desktop 27.02.2021 15:56 # 0
в Свифте у меня может быть объект, который конструируется in place (проперти сразу присваивается значение) или какой-нибудь lazy. Если у него в ините сидит открытие ресурса, которое может по какой-то причине тупить, то будет и не приятно, и не очень детерминировано
MAKAKA 27.02.2021 15:58 # 0
не понял, что неприятного в открытии ресурса в конгструкторе, пусть и тупящего.
Это явно лучше, чем отдельный метод open, добавляющий в объект лишний state
>и не очень детерминировано
Почему?
К моменту создания объекта ресурс открыт, всё логично
Desktop 27.02.2021 15:59 # 0
мне так не лучше
закрыли тему
заебали со своей жабой блять
MAKAKA 27.02.2021 16:02 # 0
почему ты против открытия сокета или файла в конструкторе?
Desktop 27.02.2021 16:03 # 0
MAKAKA 27.02.2021 16:06 # 0
Desktop 27.02.2021 16:09 # 0
2) в языках вроде Свифта инициализация поля может пройти в разных местах в разное время, отсюда некая недетерминированность
3) открытие ресурса не есть ИМХО логикой инициализации (только не надо про raii), а потому должно быть вынесено из инициализации - семантически мне так нравится
ты удовлетворён?
guest6 27.02.2021 16:13 # 0
2. то есть ты не знаешь, когда будет вызван конструктор?
3. почему не надо по raii?
Desktop 27.02.2021 16:14 # 0
2) в целом знаю, но это может быть неявно выражено в коде
3) потому что это чисто крестовая приблуда, которая к другим языкам не применима
MAKAKA 27.02.2021 19:44 # 0
В общем случае не существует требования "инициализация должна быть быстрой".
Однако есть фреймворки, которые требуют быстрого создания объекта (например, потому что он создается на UI треде).
Это особенность фреймворка, но не общее правило.
2) и что плохого в том, что в какой-то момент создастся объект и сделается запрос?
3) ну вообще RAII не привязана к конкретному языку, и кажется, что в языках с RC она тоже может быть реализована.
Desktop 27.02.2021 16:10 # 0
4) в логике фреймворков типа UIKit создание некоторых объектов и назначение этим объектам неких ресурсов разнесены во времени, как и обратные действия
Desktop 27.02.2021 16:11 # 0
guest6 27.02.2021 16:13 # 0
гораздо хуже вводить в обект лишнее состояние, и делать его мутабельным
Desktop 27.02.2021 16:15 # 0
тогда мы друг друга не поймём
пойду поем
JloJle4Ka 27.02.2021 16:18 # 0
Кстати, это всё сильно зависит от ЯП, в жабе, например, хуй что в конструкторе сделаешь, потому что там крайне не рекомендуется бросать исключения (а в йаже почти всё их кидает).
Desktop 27.02.2021 16:37 # 0
MAKAKA 27.02.2021 19:47 # 0
Скорее уж не рекомендуется это делать в С++, потому что у тебя пол объекта будет инициализирвано, а деструктор не вызовется.
Потому в С++ принято (ну, насколько я могу судить) оборачивать в классы каждый ресурс
bormand 27.02.2021 20:55 # 0
Да и похуй. У полей и локалок, которые прошли инициализацию, деструктор вызовется.
MAKAKA 27.02.2021 21:18 # 0
Я имел ввиду, что нельзя например сделать такой класс с двумя полями, каждое из которых представляет из себя внешний ресурс, и открыть их оба в конструкторе не ловя исключение и не обрабатывая явно обсёр с открытием.
А ты что думаешь про нашу дискуссию с Десктопом, кстати?
bormand 27.02.2021 21:26 # 0
Вай нот, если он не дефолтный. Ничему особо не мешает.
MAKAKA 27.02.2021 21:29 # 0
У меня есть класс, представляющий вебсайт. В него зашит урл сайта (красоту хардкода пока оставим за скобками). При создании объекта он всасывает в себя сайт.
Я серьезно не понимаю, почему так нельзя. Конечно, если нет требований фреймворка "создавать объект быстро"
bormand 27.02.2021 21:30 # 0
Хотя бы фейковый аргумент надо, имхо.
MAKAKA 27.02.2021 21:33 # 0
bormand 27.02.2021 21:36 # 0
Если это не так, лучше его убрать. Зачем расставлять грабли.
MAKAKA 27.02.2021 21:40 # 0
Я вот ожидаю, что объект после создания будет в инициализированном состоянии, готовом к использованию.
Иначе зачем мне раии?
bormand 27.02.2021 21:44 # 0
Его просто слишком легко позвать не подумав.
MAKAKA 27.02.2021 21:51 # 0
Скорее всего ты говоришь с позиции С++сника, где невинное
может вызвать бурю.
В языках где объекты живут в куче и управляются только через укатазатель, таких проблем нет.
Трудно "случайно" написать
Если мы так боимся случайного вызова, то можно сделать приватный конструктор, и фабричный метод. Но тогда нужно думать про мувы и копирования всякие
bormand 27.02.2021 21:53 # 0
Фейковый аргумент костыль конечно, но я реально не помню чтобы у меня был тяжелый конструктор, у которого не было бы аргументов.
> фабричный метод
Ну тоже норм.
MAKAKA 27.02.2021 21:59 # 0
Но такие объекты должны быть синглтонами конечно, а не создаваться на каждый чих
>Ну тоже норм.
если делать фабоичный метод, так это надо мув семантику разрешать тогда, не?
bormand 27.02.2021 22:01 # 0
А всякие ResourceLoader да VideoAdapter тяжёлую работу скорее всего в методе делать будут. Ибо менять разрешение на ходу или загружать следующий уровень захочется. Странно это делать в дефолтном конструкторе.
MAKAKA 27.02.2021 22:20 # 0
А загруженный уровень можно выкинуть вместе с текстурами, но в такой класс конечно нужно передавать как минимум номер уровня
bormand 27.02.2021 22:22 # 0
MAKAKA 27.02.2021 22:25 # 0
В общем я понял поинт: никаких особых правил в целом нет, но тяжелый дефлотный конструктор будет выглядеть странно и подозрительно, потому что так обычно не делают
Desktop 27.02.2021 23:47 # 0
- никогда больше такого не говори никому
MAKAKA 27.02.2021 23:49 # 0
На компьютере есть как правило один видеоадаптер. Какой смысл иметь несколько объектов для работы с ним?
Если тебя смущает, что время жизни синглтона не определено, то можно конечно хранить его на стеке main, например. Он явно разрушится, когда завершится main.
Но это всё равно будет один объект
Desktop 27.02.2021 23:51 # 0
- возьми любой практически ширпотребный ноутбук и пойми, как ты ошибаешься
> Какой смысл иметь несколько объектов для работы с ним?
- не с ним, а с ними
я видел приложения, которые все были по уши в синглтонах, а потом не могли открыть два документа одновременно
синглтон не просто так считается анти-паттерном
MAKAKA 27.02.2021 23:54 # 0
Мы говорили об игре. Трудно представиь себе игру, которая работает одновременно с двумя видеоадаптерами, выводя на них разную картинку. Но если такая задача встанет, то конечно никаких синглтонов.
>а потом не могли открыть два документа одновременно
Это проблема неверного использования синглтона.
>синглтон не просто так считается анти-паттерном
Кем считается?
Desktop 28.02.2021 00:00 # 0
- кто сказал про ОДНОВРЕМЕННО? Ты зашёл в настройки и переключил рендеринг на другой адаптер. А у него УЖЕ ЕСТЬ объект, настроенный на работу с ним (ну или ты его создал из фабрики).
> Это проблема неверного использования синглтона.
- у синглтона практически нет примеров верного использования, кроме каких-то application wide настроек, и то
MAKAKA 28.02.2021 00:04 # 0
>кроме каких-то application wide настроек
Вполне себе хороший пример.
Довольно очевидно, что синглтон нужен только тогда, когда на всё приложение тебе нужен только один объект.
В каких именно случаях это нужно -- вопрос к дизайну приложения.
Desktop 28.02.2021 00:08 # 0
- какая разница, мы про техническую возможность. А ты как уж на сковородке)
MAKAKA 28.02.2021 00:17 # 0
Ты привел пример противоположной ситуации.
Разумеется, синглтон (как и любой другой паттерн) не универсален.
Игра может вообще иметь интерфейс с доступом по сети, и тогда класс для видеоадаптера ей не нужен, однако это не значит, что такой класс не нужен никогда
Desktop 28.02.2021 00:27 # +1
> Игра может вообще иметь интерфейс с доступом по сети
- В большинстве своем сальпы и огнетелки очень теплолюбивы, поэтому встречаются только в экваториальных и тропических водах. Лишь несколько видов живут в полярных районах. К тому же животные эти очень требовательны к солености воды, они обитают только в тех морях и частях океана, где она составляет 33—35 ‰. В Восточном Средиземноморье, где соленость доходит до 40 ‰, а также в местах впадения рек, где она понижена, сальпы и пиросомы не живут.
MAKAKA 28.02.2021 00:30 # +1
Синглтон в Intellij Idea, например:
https://github.com/JetBrains/intellij-community/blob/master/platform/core-api/src/com/intellij/openapi/application/Application.java
Твое утверждение "синглтон не нужен" неверно.
Остальное мне трудно прокомментировать
Desktop 28.02.2021 00:34 # 0
> Твое утверждение "синглтон не нужен"
- покажи, где такое утверждение? есть редкий класс задач, где он полезен. в остальном это анти-паттерн.
MAKAKA 28.02.2021 00:40 # 0
[quote]
синглтон не просто так считается анти-паттерном
[/quote]
Из определения антипаттерна следует, что
Another solution to the problem the anti-pattern is attempting to address exists, and documented, repeatable and proven to be effective where the anti-pattern is not
Иными словами, антипаттерн всегда можно заменить на более верное решение.
А в данном случае вряд-ли существует более верный solution, так что singleton антипаттерном не является.
>есть редкий класс задач, где он полезен. в остальном это анти-паттерн.
Любое решение подходит для одного класса задач, и не подходит для другого. Это не делает его антипаттерном.
Действительно, задач для синглтона немного, но они есть.
Возвраясь к примеру с игрой: если игра при запуске настраивает видеоадаптер, а при завершении возвращает настройки, и перенастройку не поддерживает (большинство игр, выпущенных до второй половины 90-х, смену разрешений не поддерживали, например) то синглтон является вполне допустимым представлением видеоадаптера
Desktop 28.02.2021 00:46 # +1
- конечно является
> Это не делает его антипаттерном
- конечно делает
> вряд ли существует более верный solution
- класс Application это прибитый гвоздями обработчик системных событий, программисту апи-пейсатели так прямо и говорят: у тебя, шакалёнок, может быть только один, сука, обработчик. Более верный solution? Помогите Даше найти
> большинство игр, выпущенных до второй половины 90-х, смену разрешений не поддерживали
- как обычно, в ход пошли какие-то примеры, которые не имеют ни малейшего отношения к обсуждаемой теме. В такой момент становится понятно, что аргументы Макаки иссякли :-)
спасибо, я всё! доброй ночи
MAKAKA 28.02.2021 00:49 # 0
нет
> - конечно делает
нет
> класс Application это прибитый гвоздями обработчик системных событий
нет, это API для доступа к приложению. Я же дал ссылку.
>как обычно, в ход пошли какие-то примеры, которые не имеют ни малейшего отношения к обсуждаемой теме.
Ты сообщил, что singleton это антипаттерн, я привел пример его использования.
> В такой момент становится понятно, что аргументы Макаки иссякли
написал человек с аргументами
"- конечно является" и "- конечно делает"
>доброй ночи
доброй ночи
Desktop 28.02.2021 00:50 # 0
- так это я тебя косплеил, твой стиль) всё, ушёл
MAKAKA 28.02.2021 00:57 # +2
Мне кажется, что ты рассматриваешь вопросы с точки зрения IOS программиста.
В IOS действительно нет никакого смысла держать в памяти необновляемый список билетов, потому что приложения там вообще не перезапускаются по желанию пользователя (и вроде бы вообще могут работать сутками не выключаясь)
Работа с HTTP там так же реализуется через фоновый поток (делается ли это через GCD или по другому -- не важно, важно, что это не делается на main).
Но такие приложения это только небольшая часть всего софта, что пишут люди, и приемы, которые недопустимы в IOS, вполне могут быть допустимы в других областях.
Потому что в разных областях допустимы разные приемы.
К примеру, jциферки или Борманд может писать в порты оборудования напрямую, а фронтэндер bootcamp скорее всего так делать не будет никогда, и вероятно ты в IOS тоже не будешь.
Это, однако, не значит, что работа с оборудованием напрямую это антипаттерн.
Досвидания
guest3 05.03.2021 23:37 # 0
Desktop 27.02.2021 23:06 # 0
используй статические методы "класса" и теки
MAKAKA 27.02.2021 23:10 # 0
Чем меньше стейтов есть у объекта -- тем лучше. В идеале он один. Не понимаю, как это противоречит ооп
Desktop 27.02.2021 23:12 # 0
не хочешь стейт, не бери ООП
MAKAKA 27.02.2021 23:18 # 0
ООП это про объединение в одной сущности данных и методов для работы с ними.
Хрестоматийный пример ООП, просто из палаты мер и весов: получает все параметры в конструкторе, имеет только один стейт, и никогда его не меняет
Desktop 27.02.2021 23:20 # 0
- тебе на работе платят за копипасту хрестоматийных примеров из википедии или всё же за реальный осмысленный код?
или ты только с DTO и работаешь?
MAKAKA 27.02.2021 23:23 # 0
Мне платят за реальный код, в котором бОльшая часть классов получает свой стейт в конструкторе и иммутабельна. Это никак не мешает мне работать с ООП.
Desktop 27.02.2021 23:25 # +1
с другой стороны, судя по всему, на такой работе остаётся много времени, чтобы, например, обсирать "бойлерплейт" в Джаве
MAKAKA 27.02.2021 23:26 # 0
Какая вообще связь?
Desktop 27.02.2021 23:28 # 0
MAKAKA 27.02.2021 23:36 # 0
я привел пример иммутабельного класса.
Если тебя смущает недостаточное количество логики, то вот тебе классическая стратегия
никакого стейта нет, а ооп есть.
ООП не требует, чтобы классы имели мутабельный стейт.
Desktop 27.02.2021 23:37 # 0
- покажешь где?
MAKAKA 27.02.2021 23:39 # 0
если я неверно тебя понял, то объясни пжлста, что ты имел ввиду.
Desktop 27.02.2021 23:43 # 0
если тебе нужны тупые данные без состояний, то бери язык без ООП, хуярь в нём структуры и обрабатывай при помощи чистых функций. зачем тебе ООП?
Desktop 27.02.2021 23:15 # 0
MAKAKA 27.02.2021 23:23 # 0
Desktop 27.02.2021 23:27 # 0
если бы у бабушки были...
MAKAKA 27.02.2021 23:29 # 0
В таком случае у объекта будет одно состояние: инициализирован ответом, вот этот ответ в поле лежит.
Если я сделаю для запроса отделтный метод, то у объекта будет два состояния:
* запрос еще не сделали, и в поле лежит хуй (null? пустая строка? что там должно быть?
* запрос уже сделали, и в поле лежит ответ
Каждый метод объекта будет обязан проверять стейт, это сильно усложнит работу объекта.
Не говоря уже о том, что это сделает его не потокобезопасным
Desktop 27.02.2021 23:32 # +1
> Не говоря уже о том, что это сделает его не потокобезопасным
- пошла софистика
MAKAKA 27.02.2021 23:38 # 0
Объект не создастся, и проблемы не будет.
>>потокобезопасным
>- пошла софистика
Верно ли я понимаю, что тебе не приходилось сталкиваться с вопросами потокобезопасности? Если приходилось, тогда что ты имел ввиду, говоря о софистике?
Desktop 27.02.2021 23:41 # 0
- если ты видишь что-то непотокобезопасное, а тебе его надо сделать потокобезопасным, сделай. Любой нормальный язык тебе даёт всё для этого. К теме разговора это отношения не имеет
MAKAKA 27.02.2021 23:44 # 0
Desktop 27.02.2021 23:45 # 0
MAKAKA 27.02.2021 23:50 # 0
Объект, имеющий мутабельный стейт, нужно синхронизировать, так изменяемые поля могут оказаться в неизвестном состоянии при обращении к ним.
Если же все поля установлены в конструкторе, то к созданнмоу объекту можно смело обращаться из любого потока.
Если потом видит объект, то он видит и все его поля
Что не так?
Desktop 28.02.2021 00:06 # 0
второе. а ты типа собрался хттп-запрос делать из того же потока, в котором конструктор позвали? то есть, вызвали на main, всё, блочим UI? или всё же как-то асинхронно, что эффективно делит на ноль все твои соображения об иммутабельности?
или ты щас скажешь, что async/await есть в каждом мейнстримовом языке?))
MAKAKA 28.02.2021 00:13 # 0
не очень понятно причем тут это. Если объект впринципе может изменять свое состояние, значит в каждый конкретный момент соседний поток состояния этого не знает, и обращение к полям нужно синхронизировать, иначе будут гонки.
> а ты типа собрался хттп-запрос делать из того же потока, в котором конструктор позвали?
Да.
>то есть, вызвали на main, всё, блочим UI
Объект ничего не знает о том, в каком потоке его будут вызвать.
Существует огромное количество ситуаций, когда поток можно блочить: это фоновая обработка задач, работа в командной строке, в сценарии, итд.
Если фреймворк запрещает медленные конструкторы, но конечно ничего загружать в них нельзя, о чём я почти сразу и написал:
[quote]
Однако есть фреймворки, которые требуют быстрого создания объекта (например, потому что он создается на UI треде).
[/quote]
Desktop 28.02.2021 00:16 # 0
в общем, если ты вдруг будешь писать UI, попробуй сделать именно так: отправить хттп-запрос из конструктора в похуй каком потоке, сделай ревью.
Интересно будет почитать причитания о том, как злые коллеги не хотят его апрувить)
MAKAKA 28.02.2021 00:19 # 0
Если я внесу в такой класс знания о UI потоке, то на ревью его скорее всего завернут.
Desktop 28.02.2021 00:21 # 0
тебе надо знать про поток выполнения. а он должен быть специальным для работы с сетью. Именно для того, чтобы не блокировать пользовательский интерфейс.
MAKAKA 28.02.2021 00:26 # 0
Второй способ более универсален, так как кроме UI приложений, есть еще и другие приложения.
Desktop 28.02.2021 00:29 # 0
это правда где-то может сойти за адекватное решение, кроме наколеночного скрипта?
MAKAKA 28.02.2021 00:31 # 0
Так работают очень многие утилиты командной строки, например.
Разумеется, делать так UI нельзя. Это требование фреймворка (всех фреймворков для работы с UI), о чём и было сказано изначально
Desktop 28.02.2021 00:35 # 0
а "энтерпрайз приложение" где здесь?
MAKAKA 28.02.2021 00:46 # 0
не понятно, почему интерфейс вывода (командная строка, ui, web итд) должен как-то влиять на использование или не использование ООП
>а "энтерпрайз приложение" где здесь?
В энтерпрайз приложении задачи могут выполняться в фоновом режиме, как по крону.
Такая задача создает объект, который в конструкторе получает нужные данные, производит с объектом какие-то действия, и завершается.
При следующем запуске она снова создаст объект.
Desktop 27.02.2021 23:42 # 0
- это если они у тебя есть. Вообще кидать исключение в вашей жабе на request timeout это хорошая практика? Или на отсутствующее соединение?
MAKAKA 27.02.2021 23:47 # 0
Кинуть бизнеслогическое исключение из конструткора вполне нормально, имхо.
Если бы я вынес загрузку билетов в отдельный метод, то в методе findTickets() мне бы пришлось проверять, что перед ним был вызван нужный метод загрузки.
Desktop 27.02.2021 23:56 # 0
а твой findTickets() работает со старыми
чтобы работать с новыми, нужно пересоздавать объект
такой себе пример
MAKAKA 27.02.2021 23:59 # 0
Работать с таким объектом проще, чем с тем, где нужно не забыть после конструктора вызвать еще и fetchTickets();
Desktop 28.02.2021 00:02 # 0
> Работать с таким объектом проще, чем с тем, где нужно не забыть после конструктора вызвать еще и fetchTickets();
- конечно проще, ведь он нихуя не умеет.
MAKAKA 28.02.2021 00:06 # 0
> ведь он нихуя не умеет.
Он умеет найти нужный билет, отсортировать билеты, и представить их в нужной форме.
Ты опять пытаешься мне рассказать, что объект без изменяемого стейта должен нихуя не уметь.
Это не верно.
Desktop 28.02.2021 00:09 # 0
твой клиент хочет обновлять список билетов раз в час
то, что билеты на сервере обновляются раз в три минуты, твой клиент ни капли не чешет
пользователи пишут гневные письма в поддержку, а Макака им отвечает: да всё мы умеем, не сцыте!
MAKAKA 28.02.2021 00:15 # 0
Если же он работает в долго живущем приложении, то вполне можно пересоздать объект
Desktop 28.02.2021 00:19 # 0
пример с загрузкой информации про билеты это обычно работа для тонкого клиента.
так вот, у тонкого клиента обычно нет никакого глобального состояния, но его компоненты в отдельный момент времени могут иметь состояние, чтобы корректно отобразить интерфейс, и обновлять его.
Ты же предлагаешь в тонком клиенте иметь глобальное состояние (список билетов, затянутый по таймеру), которое может быть некорректным, что критично для пользователя и бизнеса. При этом ты категорически отказываешься от состояния в компонентах, просто потому что "это сложно".
ну ок, чо.
MAKAKA 28.02.2021 00:24 # 0
в скрипте с названием "tickets". Какая разница -- в каком?
>это обычно работа для тонкого клиента.
Это может быть работа энтерпрайз приложения в фоновом режиме с посылкой результата по email.
>Ты же предлагаешь в тонком клиенте иметь глобальное состояние
Где я говорил что либо про тонкий клиент?
>При этом ты категорически отказываешься от состояния в компонента
Где я говорил что либо про компоненты?
Разумеется, работающее десктопное или мобильное приложение должно подтягивать билеты без перезапуска, но из этого никак не следует, что "объекты без изменяемого состояния не нужны".
Потому что кроме UI компонента такого приложения бывают еще и другие объекты.
Desktop 28.02.2021 00:25 # 0
MAKAKA 28.02.2021 00:27 # 0
Приложение выполняет задачу
* создает объект, который подтягивает список билетов
* находит в них нужный
* отсылает сообщение по email
В каком месте тут будут некорректные данные?
guest6 27.02.2021 21:38 # 0
Лол
JloJle4Ka 27.02.2021 15:26 # 0
3oJloTou_nemyx 26.02.2021 23:50 # +1
guest6 26.02.2021 23:51 # +2
тебе бы в питоноблядство, чувак:)
https://www.hyrumslaw.com/