
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

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

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

Bohdan
28.02.2018
09:38:27

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
но суть в том, что вторая зависит от констант самого класса
можно, конечно, ссылаться на них из другого...

Arthur
28.02.2018
09:39:45

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

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
окей, спасибо

Arthur
28.02.2018
09:52:25

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

Артур Евгеньевич
28.02.2018
09:53:47
да наверно я бы так сделал! вы просто попытались меня запутать со своей статикой и терйтами и я поддался)


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

Arthur
28.02.2018
09:55:10

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
или 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
эти названия нигде не применяются
не так выразился

Артур Евгеньевич
28.02.2018
10:00:46

Arthur
28.02.2018
10:01:04

Bohdan
28.02.2018
10:01:16
есть договор, в нем есть настройка — периодичность инвойсинга
в базе она хранится именно теми P** записями
но мне нужно знать коэффициент "полноты" периода
т.к. потом по нему будет корректироваться сумма инвойса
более того, кварталы - фиксированные во времени штуки
то есть
период с началом 1 марта и окончанием 31 марта будет иметь коэффициент 1, если инвойсинг по месяцам идет
и коэффициент около 0.33 - если по кварталам

Google

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

Sergey
28.02.2018
13:05:10

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

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

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