• Неймовірно але факт: ТОП-25 IT ринку насправді проти будь-яких реформ галузі

    И единороги с радугой! Единороги же!

    Підтримав: Ваня
  • Этот топик нужно удалить

    Там написано про «+10 кг» — трудно будет поддерживать.

  • Этот топик нужно удалить

    Резюме выглядит как-то странновато, не факт, что так хорошо. Доучи какой-то популярный фреймворк (ангуляр, реакт, что-то еще), возможно сделай какой-то более сложный пет-проект чем страничка, которая везде ссылается сама на себя и будет больше шансов найти работу.

  • Самый короткий IQ-тест

    четыре из трёх.

  • Можно ли посмотреть все штрафы от налоговой онлайн?

    У меня как-то раз была просрочка по уплате налогов (не успел оплатить вовремя). Так уже через несколько дней после факта просрочки меня ждало «письмо счастья» с уведомлением о вручении, в котором подробно описывалось что я лось, что именно я сделал не так и на сколько попал в деньгах. Так что если таких писем по месту регистрации ФОПа (по месту прописки) нету, то по идее волноваться не о чем.

  • Засилье анемичной доменной модели

    Тут можно вернуться к моему призыву руководствоваться здравым смыслом в рамках понимания рич и анемик моделей, и доменной модели, ведь любая аппликуха является (должна являться) и отображением реального бизнеса, который за ней стоит. Вместо того, чтобы ломать копья какая книжка или теоретическая статья лучше. Сейчас как раз много думаю на эту тему: ведь в реальном мире (по крайней мере в моем кейсе) нельзя быть просто погромиздом, нужно разбираться и доменной области бизнеса для которого пишешь код. Т.е. по хорошему нужно быть техническим экспертом для решения проблем бизнеса, а для этого нужно в этом самом бизнесе разбираться и понимать что в нем важное / главное для клиента, а с чем можно подождать или вообще забить. И этот вопрос для меня сейчас самый сложный, а не попытки понять куда какую сущность запихнуть или где какой метод / функционал должен быть расположен. Ведь когда ты понял бизнес клиента (на своем уровне конечно), вопросы типа «куда запихнуть этот долбанный функционал?» как-то отпадают сами собой.
    АПД: Выше я какбы намекаю на то, что: что явлется инвариантом чего или частью, или связанным в один контекст, или не связанным, должен диктовать бизнес (его модель), а не техническая теория. Ведь мы технически пытаемся отобразить бизнес, а не пытаемся натянуть сову на глобус, бездумно следуя технической книжке или набору технических статей. Ну по крайней мере должны пытаться :)
    Ну и продолжая на конкретном примере про сумму заказа: А почему она должна быть быть частью именно заказа? Почему бы ей не быть привязанной к Юзеру, т.к. деньги за заказ (эту самую сумму) платит юзер? Учитывая, что для расчета этой суммы мы обязательно еще должны «заглянуть» в скидки, которые тоже часть юзера и определить сколько именно этому юзеру надо заплатить денег в данном конкретном случае.
    Или еще вариант родился: Пусть сумма будет частью заказа (допустим нас и так устраивает), а Заказ частью Юзера (как и скидки), тогда для расчета суммы заказа (с учетом возможной скидки) у нас есть все данные на уровне Юзера.

    Підтримав: Андрій Літвінов
  • Засилье анемичной доменной модели

    Мой вариант начался бы с вопроса: «Если расчет скидки подразумевает работу с бОльшим количеством объектов типа „Заказ“, чем один, должен ли этот метод быть внутри заказа?»
    Я бы скорее всего его вынес в какой-нибудь РасчетСкидокСервис, который работал бы со списком заказов и рассчитывал бы их для юзеров.
    Ведь скидка — это не про заказ. Это про юзера, который сделал несколько заказов. И получает скидку не заказ, а юзер. Или не получает. :)
    Вспоминая логику, возможно сделал бы отдельное поле юзеру «Скидка», в котором бы держал пересчитываемую информацию о том, накопилась ли у него уже скидка, если да, то какая.
    Ну и конечно Сервис держал бы в себе внешние зависимости про репозиторий и если еще что-то надо.
    АПД: Мыслями навеяло. Расчет скидки даже наверное был бы ближе к внутренностям объекта юзера, ведь он предварительно должен в себе содержать всю нужную информацию про историю заказов этого самого юзера. Если нет — то юзер сервис, который будет находить эту самую историю и по ней считать скидки.

  • Засилье анемичной доменной модели

    Зависимости — это внешние по отношению к объекту (и аггрегата в т.ч.) сущности. Соответственно зависимости — удел сервисов и аггрегатов. Если мы достаем данные нужные для чего-то извне объекта, то и зависимости должны находиться вне объекта — в сервисе, аггрегате.
    Как и методы, которые работают используя эти самые зависимости.
    Внешние для аггрегата зависимости для доставания внешних для аггрегата данных — вне аггрегата (в его сервисе, аггрегате аггрегата). Да, получается «капуста», но без крайних состояний как в сторону Бугаенко, так и без крайних ситуаций, когда объект модели данных является просто переносчиком данных в анемичной модели. Но это все про близкие по духу зависимости, которые ограничиваются баундед контекстом.

    Підтримав: Андрій Літвінов
  • Какой язык улучшать дальше?

    Начни с просто спринга (Core он же IoC Container) потом уже поймешь, что все остальные спринги (Boot, Data, Security, etc) это его подпроекты и, зная основу, с остальным управишься быстрее / легче. Можешь заодно посмотреть в сторону SOLID принципов — они хороши для разработки на любом языке.

    Підтримав: Dmitry Bugay
  • Засилье анемичной доменной модели

    А если попробовать поговорить про здравый смысл с учетом знаний про ООП, ДДД и рич вс анемик модели данных?
    Если сказать что в соответствии с ООП и рич моделью объект должен знать что и как делать с собой любимым (проверки / валидации, апдейт своего состояния (если нужно) и т.д.)?
    А все, что вне объекта (работа с хранилищем данных для этого объекта, трансформация его в другие форматы данных ((де)сериализация) это работа для внешних для этого объекта сервисов?
    Не решит ли это большинство проблем?

  • «Интересный способ для рекрутеров набить базу разработчиков» ©. Чтоооо?

    Помню-помню как вы предлагали ранее другую анкету «давай ты нам напишешь и мы тебе кААААк поможем с поиском супер работы!». Даже заполнил и отправил. И уже с год тишина... Хороший сервис. Продолжайте в том же духе :)

    Підтримав: anonymous
  • Стоит ли забирать военный билет?

    Стоит ли забирать военный билет?

    Смотря у кого. У МС по боксу не рекомендовал бы.

  • Как научить ребенка читать

    Но для того, чтобы толково кодить, нужно не только писать код, но и читать код. Так что проблема с чтением не решена и очень насущна!

  • В ХНУРЭ КН просят проходить практику в реальной IT компании. Как быть?

    Проходить!

    Підтримав: anonymous
  • Даю отпор своим страхам! Хочу продукт!

    То времени нет, то сил, то снова времени, то сил. Иногда еще желания нет, но редко.

  • Корисні ресурси для програміста (оновив 27 квітня 2021)

    Для более пятничного отображения темы предлагаю немного изменить знаки препинания.
    Новый смысл выглядит гораздо более пятнично :)

    та ця тема має інших, — характер! :)
    Підтримав: Senseye
  • Понять интерфейсы

    Не успел прочитать все комменты, может кто уже и написал где:
    Интерфейс — это контракт на поведение.
    Он позволяет уменьшить связанность классов: твой класс Клайент теперь ничего не знает о реальной реализации метода пей, он знает что при его вызове произойдет этот самый пеймент. Ему не нужно знать подробностей( куда будет платиться, что еще будет вызываться для реализации платежа и т.д.)
    И вот использование интерфейса дало тебе возможность гораздо легче вносить изменения: тебе надо заменить метод пеймента на ПейментЧерезКассуВБанке() и тогда тебе не нужно будет ничего менять в клайенте.
    Тестировать такое тоже гораздо легче.
    А вот применение в твоем примере не очень:

    //тут я понимаю, что могу создать
    payment = new card или paypal или webmoney;

    надо заменить на какой-нибудь @Autowired этого же интерфейса и IoC контейнер сам найдет и вставит тебе текущую реализацию.
    Тут рекомендую больше почитать про инверсию заисимостей.
    P.S. Выгода от такого подхода почти не видна на таких маленьких примерах.
    Задумайся если у тебя будет 200 классов большинство которых будет знать друг о деталях реализации поведения друг друга и тебе нужно будет внести изменения в один из них — сколько классов в итоге реально затронут изменения?
    И та же ситуация среди классов, где они взаимодействуют друг с другом через интерфейсы, даже не подозревая как там у остальных реализовано это поведение.

  • @Утешен

    Меня в свое время настолько утешил "Утешен, что я решил не продолжать поиск дальше :)

  • Выбор робота пылесоса

    А у вас есть собака?

    Підтримали: Elvira Piatkina, Slava Abakumov
  • Нетехническое/поведенческое интервью с менеджером

    Просто будь собой на собесе. По идее он должен тебя оценивать насколько ты впишешься в команду, насколько ему будет удобно тебя менеджить и с тобой работать. И беседа скорее всего будет представлять собой обмен мнениями о построении и настройке рабочего процесса в команде, на проекте и в компании. Сойдетесь по основным подходам — будет оффер, окажется, что очень по разному смотрите на эти вещи и оба не готовы переходить на новый для себя подход — не будет оффера.
    Как-то так.

    Підтримав: anonymous
← Сtrl 123 Ctrl →