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

Yegor
12.01.2018
09:54:41

Sergey
12.01.2018
09:54:44

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

Google

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

Alex
12.01.2018
10:13:30

Sergey
12.01.2018
10:17:33

Arsen
12.01.2018
10:18:44

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

Митко Соловец?
12.01.2018
10:23:08

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

Cargeh
12.01.2018
10:25:13

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

Sergey
12.01.2018
10:25:37

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
Однако вот тебе конкретный пример. Человек покупает подписку на сервис в интернет магазине, и при этом может выбрать за какой период будет платить, и чем больше период тем больше скидка. Однако у человека могут быть ещё и персональные скидки, а также купоны с акций. Как оформить расчёт цены за сервис в конце выбранного биллинг периода?

Sergey
12.01.2018
10:35:10

Евгений
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
мои пройдет) я уж постраюсь

Oleksandr
12.01.2018
10:39:10
а если скидки независимы, то банальный фолдл

Евгений
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

Sergey
12.01.2018
10:43:12

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

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

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

Alexander
12.01.2018
10:46:56

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

Oleksandr
12.01.2018
10:49:49

Alexey
12.01.2018
10:50:06

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

Alexey
12.01.2018
10:50:54

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

Admin
ERROR: S client not available

Sergey
12.01.2018
10:52:02

Alexey
12.01.2018
10:52:37

Arsen
12.01.2018
10:52:51

Oleksandr
12.01.2018
10:53:10

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

Sergey
12.01.2018
10:53:16

Arsen
12.01.2018
10:53:22

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
ну тоже пофиг, я просто не знаю, что такое Stream

Arsen
12.01.2018
10:55:28

Oleksandr
12.01.2018
10:55:34
Iterable пусть будет?
кмк это не принципиальный момент

Sergey
12.01.2018
10:55:57

Arsen
12.01.2018
10:55:57
ну да

Alexey
12.01.2018
10:57:01

Sergey
12.01.2018
10:57:07

Alexey
12.01.2018
10:57:46

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