@jvmchat

Страница 2149 из 2890
Lackmorrison
12.01.2018
09:54:25
ну об этом в посте и речь, что это такая фундаментальная вещь что описывать ее в каком-то ёба-принципе смысла 0

Yegor
12.01.2018
09:55:17
таких принципов можно сочинить на страницу

Google
Cargeh
12.01.2018
10:12:24
@yegor256 идейку подкинули: написать компилятор, который будет конструкцию объектов заменяьт вызовами функций. Можно будет писать на тру ооп, не насилуя ГЦ

Sergey
12.01.2018
10:17:33
@yegor256 идейку подкинули: написать компилятор, который будет конструкцию объектов заменяьт вызовами функций. Можно будет писать на тру ооп, не насилуя ГЦ
У меня аналогичная идейка возникала, и я даже работал над ней. Муторно. Непонятно что делать с методами возвращающими и принимающими объекты.

Sergey
12.01.2018
10:20:01
У меня аналогичная идейка возникала, и я даже работал над ней. Муторно. Непонятно что делать с методами возвращающими и принимающими объекты.
По логике один вызов на композите в EO стиле можно разложить в одну баааальшуую процедуру, избежав при этом ненужных аллокаций. Но это придется делать для любого клиентского вызова. Для каждого entry pointа. И такие процедуры будут совсем не реюзабл

То есть это применимо для приложений (где entry point это main), а вот для библиотек четкактонеочень

Sergey
12.01.2018
10:24:10
кстати как там EO? проект уже закрылся?

Cargeh
12.01.2018
10:25:13
кстати как там EO? проект уже закрылся?
Егор вон объявил, что над 3-м томом работает

Sergey
12.01.2018
10:25:35
я про язык

Sergey
12.01.2018
10:25:37
То есть это применимо для приложений (где entry point это main), а вот для библиотек четкактонеочень
Я было начинал делать подобную схему но пока пришел к выводу что игра не стоит свеч. Гораздо проще выглядит оптимизировать EO код ища узкие места профайлером и переписывая композицию на процедурный лад там где это действительно нужно

Sergey
12.01.2018
10:25:55
https://github.com/yegor256/eo

Google
Alexey
12.01.2018
10:29:46
И должна оставаться возможность добавить ещё поведения

А ещё наш мир не идеален, в нём много условий и краевых случаев, которые приходится отражать в коде

Sergey
12.01.2018
10:31:40
И должна оставаться возможность добавить ещё поведения
Да хрень это а не бизнес кейс. Опять абстракщина какая то - поведение, объекты. Вам спецификацию требований так же пишут?

Alexey
12.01.2018
10:32:13
Sergey
12.01.2018
10:33:00
А общий принцип такой что когда вы говорите "добавить еще поведения" в объект - это уже нарушение SRP, OCP и скорее всего ISP.

Впринципе так обычно с сервисами и поступают. Нужен новый функционал - берем какой нить из сервисов, и лабаем там новый метод.

Alexey
12.01.2018
10:34:41
Однако вот тебе конкретный пример. Человек покупает подписку на сервис в интернет магазине, и при этом может выбрать за какой период будет платить, и чем больше период тем больше скидка. Однако у человека могут быть ещё и персональные скидки, а также купоны с акций. Как оформить расчёт цены за сервис в конце выбранного биллинг периода?

Евгений
12.01.2018
10:35:49
пф СкидкаИнтерфейс, собираем всех возможных, пихаем в СкидкаКалькулятор .... PROFIT

изи

Oleksandr
12.01.2018
10:36:47
забыл абстрактную скидку

и фабрику скидок

Arsen
12.01.2018
10:37:00
и фабрику скидок
абстрактную

Евгений
12.01.2018
10:37:05
ну это же очевидно

Alex
12.01.2018
10:37:18
Без обсервера скидок никуда жи

Евгений
12.01.2018
10:37:39
и ПРЕ/ПОСТ процессинга тоже

и все это в аннотацию @Скидка запихать

Alex
12.01.2018
10:38:32
Приёмочные тесты не пройдет

Google
Евгений
12.01.2018
10:39:09
мои пройдет) я уж постраюсь

Евгений
12.01.2018
10:41:34
этож прям по паттернам ОО проектирования банды четырех)

Sergey
12.01.2018
10:41:49
Ок. Щас будет
Цель - посчитать цену. Заводим интерфейс - Цена. Методы - значение() и валюта(). Первая имплементация - фейк. В конструкторе цена и валюта, методы возвращают то что в конструкторе. Далее - ЦенаСУчетомСкидки(Цена, скидка). В конструкторе цена и размер скидки. Методы высчитывают цену с учетом скидки. Далее - купоны. Про купоны инфы в примере недостаточно но скорее всего это отдельный интерфейс Купон. Какие там методы - зависит от того как купон может влиять на итоговую цену. ЦенаСУчетомКупона(Цена, Купон). И наконец ИсходнаяЦенаПродукта(ИД_продукта), который извлечет цену из (базы/другогосервиса).

Oleksandr
12.01.2018
10:42:03
мне кажется синтаксис очень тяжелым у них
а ты понимаешь, что в ЯП смотреть на синтаксис — последнее дело? (он не играет никакой роли)

Alexander
12.01.2018
10:42:09
этож прям по паттернам ОО проектирования банды четырех)
падажжи, тут не хватает тогда как минимум бриджа и визитора

Alexander
12.01.2018
10:44:36
А вот вопрос сирозный - а кто-нибудь пользовался rest-assured?

Oleksandr
12.01.2018
10:44:46
и валюта тут — перпендикулярна, не надо сюда примешивать

Sergey
12.01.2018
10:45:48
Oleksandr
12.01.2018
10:46:20
Я дал черновой вариант. Не буду же я здесь CRM целиком расписывать. Как этот подход мешает их комбинировать?
это принципиальное замечание невозможно расчитать деньги, имея данные лишь по одной скидке

Kirill
12.01.2018
10:46:28
Добрый день. Вот вместо зарезервированного ключевого слова class используют -> clazz для название переменной. Я такое часто видел и думаю, что это уже что-то вроде конвенции. А есть ли еще конвенции для других ключевых слов? Хотел назвать переменную default, но не смог по понятным причинам, пришлось назвать $default ?

Oleksandr
12.01.2018
10:46:32
(в общем случае)

Sergey
12.01.2018
10:47:04
это принципиальное замечание невозможно расчитать деньги, имея данные лишь по одной скидке
А где я сказал что в коненом итоге имеются данные об одной скидке?

Alexander
12.01.2018
10:47:06
cls?

Oleksandr
12.01.2018
10:47:36
А где я сказал что в коненом итоге имеются данные об одной скидке?
например, ЦенаСУчетомКупона(Цена, Купон), в интерфейсе СкидкаИнтерфейс

короче, я б такое и близко не аппрувнул

Google
Sergey
12.01.2018
10:48:48
Но я не уточняю здесь что такое Купон. Не знаю я что такое Купон пока что. Это контракт, какие у него будут методы зависит от того как этот самый купон влияет на цену

Arsen
12.01.2018
10:49:22
полная хрень поскольку скидкы могут комбинироваться и влиять друг на друга, то никакая конкретная скидка не должна знать ничего, кроме своего типа (класса) и значения скидки
а если скидка, скажем, не на всю одежду, а только на брюки? кто об этом знает, конкретные брюки, скидка, или AbstractDiscountFactoryBean?

Oleksandr
12.01.2018
10:49:49
а если скидка, скажем, не на всю одежду, а только на брюки? кто об этом знает, конкретные брюки, скидка, или AbstractDiscountFactoryBean?
берешь все-все (все виды имеющихся скидкок), запихиваешь в специальный метод, и он считает

Alexey
12.01.2018
10:50:06
Цель - посчитать цену. Заводим интерфейс - Цена. Методы - значение() и валюта(). Первая имплементация - фейк. В конструкторе цена и валюта, методы возвращают то что в конструкторе. Далее - ЦенаСУчетомСкидки(Цена, скидка). В конструкторе цена и размер скидки. Методы высчитывают цену с учетом скидки. Далее - купоны. Про купоны инфы в примере недостаточно но скорее всего это отдельный интерфейс Купон. Какие там методы - зависит от того как купон может влиять на итоговую цену. ЦенаСУчетомКупона(Цена, Купон). И наконец ИсходнаяЦенаПродукта(ИД_продукта), который извлечет цену из (базы/другогосервиса).
Как параметризуется тип скидки? Что, если к цене применяется несколько скидок? Допустим, что купон это тоже скидка с фиксированной ценой, которая действует один раз и не должна применяться при рекарринге (втором и последующих расчётах цены в конце периода).

Arsen
12.01.2018
10:50:10
а у кого этот метод?

Oleksandr
12.01.2018
10:51:33
а у кого этот метод?
да пофиг сделай, к примеру, object Discount, и у него def calculateAllDiscounts(original: Item, discounts: Seq[Discount]): BigDecimal

Admin
ERROR: S client not available

Alexey
12.01.2018
10:52:37
Arsen
12.01.2018
10:52:51
да пофиг сделай, к примеру, object Discount, и у него def calculateAllDiscounts(original: Item, discounts: Seq[Discount]): BigDecimal
то есть если это перевести на джаву, то у класса Discount будет статический метод calculateAllDiscounts(Item original, Stream<Discount> discounts)?

Arsen
12.01.2018
10:53:14
только лучше бы его назвать totalPrice

Sergey
12.01.2018
10:53:16
То есть мы получаем объект ЦенаСоСкидкойИКупоном?
Почему? Зачем нам это если есть ЦенаСоСкидкой, ЦенаСКупоном и композиция?

Arsen
12.01.2018
10:53:22
да, только не Stream, а List
зачем нам лист?

Oleksandr
12.01.2018
10:53:28
зачем нам лист?
а почему нет?

что-то итерируемое надо

Arsen
12.01.2018
10:53:45
а почему нет?
зачем упорядочивание и доступ в середину по индексу

Sergey
12.01.2018
10:53:58
Почему? Зачем нам это если есть ЦенаСоСкидкой, ЦенаСКупоном и композиция?
Не - замутить конечно можно если сильно хочется например матрешку сократить

Google
Alexey
12.01.2018
10:53:58
Почему? Зачем нам это если есть ЦенаСоСкидкой, ЦенаСКупоном и композиция?
А как будет выглядеть эта композиция? И что должно именно композироваться? По факту, цена только одна, меняется только набор модификаторов к ней

Oleksandr
12.01.2018
10:54:58
зачем упорядочивание и доступ в середину по индексу
упорядочивание? доступ в середину, для List, не гарантирует константы же

ну тоже пофиг, я просто не знаю, что такое Stream

Arsen
12.01.2018
10:55:28
упорядочивание? доступ в середину, для List, не гарантирует константы же
я не говорил про константу ? упорядочивание в том смысле что [1,2] не то же самое что [2, 1]

Oleksandr
12.01.2018
10:55:34
Iterable пусть будет?

кмк это не принципиальный момент

Sergey
12.01.2018
10:55:57
А как будет выглядеть эта композиция? И что должно именно композироваться? По факту, цена только одна, меняется только набор модификаторов к ней
Ну глядите - я никогда не девелопил онлайн магазин и слабо представляю как они МОГУТ комбинироваться в реале (слабо представляю требования), но в общем случае скомбинировать их можно как ЦенаСКупоном(ЦенаСоСкидкой(ЦенаИсходная)).

Arsen
12.01.2018
10:55:57
ну да

Sergey
12.01.2018
10:58:19
Дальше, набор скидок не обязательно такой, я выше обозначил ещё и про персональные скидки и акции.
Это меняет лишь набор звеньев в этой композиции. Будет там на одну скидку/купон больше или меньше

Alexey
12.01.2018
10:58:49
Это меняет лишь набор звеньев в этой композиции. Будет там на одну скидку/купон больше или меньше
А кто будет определять, какие звенья будут входить в конечную цену при расчёте?

Вот подошёл конец периода, надо посчитать цену чтобы взять деньги

Sergey
12.01.2018
10:59:49
Вот я покупатель, пришел купить у вас брюки

И задача стоит - как? Понять какие скидки применить к моим брюкам?

Lackmorrison
12.01.2018
11:00:59
ну как минимум то, что как уже не раз сказали - нужно нечто, что будет определять - какие скидки не комбинируются

Sergey
12.01.2018
11:02:05
ну как минимум то, что как уже не раз сказали - нужно нечто, что будет определять - какие скидки не комбинируются
А. Ну ок. Цена - это деньги с валютой, там такой семантики нет. Если нет - идем на уровень выше. По какому принципу принимается решение принимать купон или нет?

Страница 2149 из 2890