@oop_ru

Страница 535 из 785
Roman
28.02.2018
07:38:52
Maksim
28.02.2018
07:39:19
Про зарплаты потёрли?
конечно) тупиковая тема

Bohdan
28.02.2018
07:40:02
а тему вообще развивать начали?

или Фарт расчехлил банхаммер раньше?

Google
Roman
28.02.2018
07:45:51
или Фарт расчехлил банхаммер раньше?
Да не знаю. Просто вспомнил и решил сообщение удалить. Смотрю, а тут пусто) На счёт банхаммера не скажу.

Dmitriy
28.02.2018
07:59:22
зарплаты с ООП слабо коррелируются )

Maksim
28.02.2018
08:00:04
зарплаты с ООП слабо коррелируются )
умеешь ооп - получи 150+; не умеешь - 40)

Sergey
28.02.2018
08:04:43
так

прекращайте

Bohdan
28.02.2018
09:21:17
давайте еще немного побеседуем про srp вообще и информационного эксперта в частности вот есть у меня один класс, который занимается тем, что считает периоды по датам делает одну важную штуку и две вспомогательных важная: получает на вход дату начала и конца периода и тип (P1M/P3M/P1Y) (P3M для кварталов) отдает на выход массив периодов из двух дат и float коэффициента, который показывает, насколько этот период "полный" (период с 15 по 30 апреля - это коэф. 0.5) вспомогательные: колво дней между двумя датами и колво дней в периоде по его стартовой дате и типу периода сейчас это дело явно нарушает SRP с другой стороны - information expert вроде бы вполне на месте (т.к. в этом классе содержится инфа о кварталах и прочее) кто как разрешил бы такую ситуацию? мои варианты: - статические методы - фигня, проблемы не решает - бить на классы - ну тоже не очень - трейты - дублирование кода

Артур Евгеньевич
28.02.2018
09:23:07
отдает на выход массив периодов из двух дат и float - я уже тут не понял...это один метод возвращает что ли всё сразу?

Alan
28.02.2018
09:23:52
при этом ты не говоришь кому нужны изменения в нем и какую бизнес задачу он решает, разве можно так судить о нарушении srp по данным?

Bohdan
28.02.2018
09:36:32
при этом ты не говоришь кому нужны изменения в нем и какую бизнес задачу он решает, разве можно так судить о нарушении srp по данным?
изменения то такое просто сейчас везде, где мне нужен этот функционал - я создаю объект new PeriodCalculator() и дальше работаю с ним

Arthur
28.02.2018
09:38:23
если ты где-то используешь эти вспомогательные функции еще, отдельно от PeriodCalculator , то имеет смысл вынести их в отдельную сущность. а так, это вплоне могут быть private методы калькулятора, которые помогают ему там что-то считать

Bohdan
28.02.2018
09:38:27
отдает на выход массив периодов из двух дат и float - я уже тут не понял...это один метод возвращает что ли всё сразу?
да, тоже костыльная штука оптимально было бы класть на какую-то dto, но на тот момент времени не было

Dmitriy
28.02.2018
09:38:28
мне кажется: две даты и флоат - это сущность Period

Arthur
28.02.2018
09:38:29
ну, я так думаю

Google
Bohdan
28.02.2018
09:38:45
первая вспомогательная - используется и в калькуляторе, и отдельно, вторая используется отдельно

Dmitriy
28.02.2018
09:39:02
а твой калькулятор уже возвращает массив VO

Bohdan
28.02.2018
09:39:35
но суть в том, что вторая зависит от констант самого класса можно, конечно, ссылаться на них из другого...

Bohdan
28.02.2018
09:40:20
окей, с этим в принципе согласен делать ли эти классы сугубо статическими?

стейта и зависимостей на данный момент у них нет

и я максимально избегаю добавления оных - дабы применять на уровне сущностей

Arthur
28.02.2018
09:41:35
насчет статики сам не знаю )

Bohdan
28.02.2018
09:43:50
вроде бы оно просится в трейты с другой стороны за трейты автоматически хочется ляпнуть себя по рукам :D а альтернативой здесь вижу только статику...

Arthur
28.02.2018
09:44:47
мне кажется статика норм вариант для общих действий применимых к экземплярам класса, т.е. как в том примере с эмуляцией параметризированных конструкторов, который ты кидал вчера

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

Bohdan
28.02.2018
09:46:50
в трейтах меня смущает то, что под капотом - это копипаст

Arthur
28.02.2018
09:48:10
в трейтах меня смущает то, что под капотом - это копипаст
не понял тебя? наоборот же типо ты туда засовываешь кусок кода и юзаешь его везде )

или на уровне интерпретатора

Bohdan
28.02.2018
09:48:39
ну да) но фактически php тупо копипастит то, что в трейте, в сам класс

Артур Евгеньевич
28.02.2018
09:50:38
вроде бы оно просится в трейты с другой стороны за трейты автоматически хочется ляпнуть себя по рукам :D а альтернативой здесь вижу только статику...
Мне кажется здесь статика будет уместна - я не брезгую статикой когда мне нужно выполнять какие-то общие операции над какими то примитивными VO. Т.е те классы которы в теории могли бы быть частью стандратной библиотеки языка. Конечно можно вынести всё в MyDateFormatSevice и его инджектить всюду но хз

Bohdan
28.02.2018
09:50:57
сервис не катит - не буду ведь я его в сущности инжектить

Arthur
28.02.2018
09:51:17
тогда я за статику +

Google
Артур Евгеньевич
28.02.2018
09:51:33
но вообще хотелось бы услышать на этот счет еще мнений. когда уместно юзать трейты и статику
я считаю что трейты не нужны, уместно использовать когда лень заморачиваться над архитектурой и разделением ответственностей и просто какой то кусок нужно срочно заюзать где то

Bohdan
28.02.2018
09:51:37
окей, спасибо

Bohdan
28.02.2018
09:53:26
просто если раньше я к трейтам относился нормально (хоть и не приходилось применять), то после того, как понял детали реализации - сразу пробило на фу

Артур Евгеньевич
28.02.2018
09:53:47
давайте еще немного побеседуем про srp вообще и информационного эксперта в частности вот есть у меня один класс, который занимается тем, что считает периоды по датам делает одну важную штуку и две вспомогательных важная: получает на вход дату начала и конца периода и тип (P1M/P3M/P1Y) (P3M для кварталов) отдает на выход массив периодов из двух дат и float коэффициента, который показывает, насколько этот период "полный" (период с 15 по 30 апреля - это коэф. 0.5) вспомогательные: колво дней между двумя датами и колво дней в периоде по его стартовой дате и типу периода сейчас это дело явно нарушает SRP с другой стороны - information expert вроде бы вполне на месте (т.к. в этом классе содержится инфа о кварталах и прочее) кто как разрешил бы такую ситуацию? мои варианты: - статические методы - фигня, проблемы не решает - бить на классы - ну тоже не очень - трейты - дублирование кода
Хотя если подумать, можно создать иммутабельный VO Period. Который в конструкторе будет принимать даты, и уже у созданного периода можно получать будет разную инфу - полноту, число дней(недель, месяцев и т.д)

да наверно я бы так сделал! вы просто попытались меня запутать со своей статикой и терйтами и я поддался)

Bohdan
28.02.2018
09:54:45
тут меня сразу подмывает завести наследование (т.к. периодов в приложении два) но я не поддаюсь и думаю про композицию сущностей и embeddable...

Bohdan
28.02.2018
09:55:20
тут зависит от потребностей

мне таки не прокатит т.к. Period не должен знать, является ли он месяцем, кварталом или годом

Артур Евгеньевич
28.02.2018
09:55:50
с таким же успехом можно и сервис сделать, не?
нет, тут у нас нормлаьный объект со своей логикой

Артур Евгеньевич
28.02.2018
09:56:03
а сервис это та же статика будет в этой ситуации

Bohdan
28.02.2018
09:56:32
это относится к родительской сущности (периодичность инвойсинга)

Артур Евгеньевич
28.02.2018
09:56:41
мне таки не прокатит т.к. Period не должен знать, является ли он месяцем, кварталом или годом
так а зачем ему это знать? просто методы типа getDayInPeriod() getSecondInperiod()

или getTimePartInPeriod($timePeriodName) - неудачный нейминг но идея понятная

Bohdan
28.02.2018
09:57:19
а потому, что у меня в моем классе из опмессаги есть метод getPeriods(\DateTime $startDate, \DateTime $endDate, string $type)

и в type заходит P1M/P1Q(который по сути P3M)/P1Y

Arthur
28.02.2018
09:57:44
нет, тут у нас нормлаьный объект со своей логикой
так а сервис не будет объектом со своей логикой?

Admin
ERROR: S client not available

Google
Bohdan
28.02.2018
09:58:00
Артур Евгеньевич
28.02.2018
09:58:20
так а сервис не будет объектом со своей логикой?
нет это просто будет набор функций, который получают данные и возвращают данные, но завернутый в объект)

Bohdan
28.02.2018
09:58:36
период должен знать только свою начальную и конечную дату а коэффициент ему должен считать кто-то извне

Артур Евгеньевич
28.02.2018
09:58:52
P1M - это месяц? а P1Q - это квартал?

Bohdan
28.02.2018
09:58:57
ага

DateInterval под капотом был изначально

Артур Евгеньевич
28.02.2018
09:59:43
период должен знать только свою начальную и конечную дату а коэффициент ему должен считать кто-то извне
ну не знаю насчет этого...по сути он же обладает всей информацией необзходимой для подсчета

Bohdan
28.02.2018
09:59:56
не обладает, если он не знает partition type

Артур Евгеньевич
28.02.2018
09:59:57
ага
а это названия объектов же, не классов?

Bohdan
28.02.2018
10:00:18
а это названия объектов же, не классов?
P1M? нет, просто спека DateInterval

эти названия нигде не применяются

не так выразился

Артур Евгеньевич
28.02.2018
10:00:46
не обладает, если он не знает partition type
так а какая разницы что у нас квартал или месяц...число дней внутри периода одинакого же считается??

Bohdan
28.02.2018
10:01:16
есть договор, в нем есть настройка — периодичность инвойсинга в базе она хранится именно теми P** записями

но мне нужно знать коэффициент "полноты" периода

т.к. потом по нему будет корректироваться сумма инвойса

более того, кварталы - фиксированные во времени штуки

то есть период с началом 1 марта и окончанием 31 марта будет иметь коэффициент 1, если инвойсинг по месяцам идет и коэффициент около 0.33 - если по кварталам

Google
Bohdan
28.02.2018
10:04:21
поэтому я не могу инкапсулировать логику расчета коэффициента в период на основании его дат - мне проще хранить их уже рассчитанными (тем более, изменений не предвидится)

@fes0r как появишься - подскажи, пожалуйста: при композиции сущностей ты в композите делаешь геттер на вложенную сущность или пробрасываешь геттеры до необходимых полей?

Bohdan
28.02.2018
13:06:22
согласен, вопрос туповат в итоге сделал без проброса

Sergey
28.02.2018
13:18:31
ну то есть по хорошему у тебя есть закон деметры и здравый смысл

а еще есть способность закрыть на это все глаза и сделать фичу)

Bohdan
28.02.2018
13:22:36
ну идея там была в чем-то типа хелпер-метода тупо чтобы сократить цепочки вызовов (точнее, спрятать их в метод) но это как-то фи, не спорю

Страница 535 из 785