@oop_ru

Страница 177 из 785
da horsie
06.04.2017
23:38:40
мне такой подход тоже кажется верным. еще одна причина для этого - фреймворки. взаимодействие с транспортным уровнем (веб, api, GUI, cli) как правило очень хорошо реализовано готовыми библиотеками. и, опять же, как правило, контроллеры довольно тесно связаны с фреймворками. ядро бизнес-логики должно быть независимо от фреймворка и от механизма доставки.

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

Sergei
06.04.2017
23:43:40
допустим есть ввод юзера, его лучше валидировать? я думаю что можно сделать в модели пакет с валидаторами которые будут тестировать пароль, никнейм и т.д.

Google
Max
07.04.2017
08:23:01
валидация - ответственность контроллера, в модель валидацию пихать не стоит, в модели только бизнес логика

Paul
07.04.2017
08:27:08
валидация - ответственность контроллера, в модель валидацию пихать не стоит, в модели только бизнес логика
Но валидация проверяет условия, которые относятся к предметной области (скажем, что uid число и > 0 или что имя не может быть пустым).

Max
07.04.2017
08:27:52
ну да, такую валидацию уже в модель, она к ней относится

Paul
07.04.2017
08:27:53
Вот конвертация — другое дело. Где-то она нужна (веб-форма какая-то), а где-то нет (скажем qt поле какое-то), так что это логично иметь в контроллере

Max
07.04.2017
08:28:33
в контроллере валидация инпутов юзера просто, чтобы совсем левых данных не слал, без знания условий модели

Dmitry
07.04.2017
08:29:14
А что такое инпуты юзера? не модель ли?

тогда возникает вопрос: как контроллер должен валидировать правильность модели...?

Max
07.04.2017
08:30:06
нет, ты же инпуты получаешь до модели, вот когда в модель через dependency injection передаешь, тогда они и становятся заботой модели

контроллер не валидирует правильность модели, только инпуты

Paul
07.04.2017
08:30:50
ппц, и сюда di притащили

ну а чо, модно же ©

Max
07.04.2017
08:31:24
модель валидирует уже аргументы, а не инпуты контроллера, соответственно она больше знает

Dmitry
07.04.2017
08:32:22
т.е. валидация происходит 2жды?

Google
Max
07.04.2017
08:34:33
ну да, в контроллере общая валидация, без знания правил, в модели валидация, привязанная к бизнес логике, т.к. модель знает больше о своих полях

Aleh
07.04.2017
08:41:57
Di в модель передает О.о

В контроллере мы какие-то абстрактные данные внешнего мира конвертим в конкретные типы нашего приложения и прокидываем дальше

Max
07.04.2017
08:49:47
в контроллере валидируются данные относящиейся к application layer, в модели конкретно к business layer этой модели. Т.е. если есть валидация пароля, привязанная к модели, то она там и валидируется. А вот какое-нибудь поле password_should_be_confirmed или csrf токен уже в контроллере, т.к. мы в будущем можем добавить другие модели, где это поле не нужно

Aleh
07.04.2017
08:50:33
я просто не очень люблю называть проверки в модели валидацией

сущности знают и контролируют свои инварианты, это не совсем валидация мне кажется, ну или как минимум плохо называть и то, и другое валидацией, потому что это все-таки разные "валидации"

Java73
07.04.2017
09:15:22
Господа, является ли тру ооп, если я имею customobject, который выполняет часть одного метода, общую для всех наследников, и несколько наследников, которые выполняют конкретную часть, предварительно вызывая тот же метод предка?

А то скажите что наследование в принципе зло))

Если что, customobject является наследником более общего абстрактного объекта интерфейсного

Sergey
07.04.2017
09:17:01
почему не взять композицию?

Java73
07.04.2017
09:17:11
Началось

Композиция тоже есть, поскольку конкретная реализация интерфейса включается как поле другого объекта

Max
07.04.2017
09:37:14
если наследники принимают одни те же аргументы в метод, возвращают те же ответы и метод выполняет одну и ту же функцию у всего дерева, то все хорошо

принцип лисков соблюдается

Bob
07.04.2017
19:00:45
/stat@combot

Combot
07.04.2017
19:00:51
combot.org/chat/-1001071233926

Sergei
08.04.2017
13:06:33
Какой бест практис по организации фабрики, в смысле не применяя оператор switch? Есть вариант с рефлекшн но есть ли другие?

Alexander
08.04.2017
13:10:05
Можно внутри держать мапу

Искать по ней

Можно список туплов: <критерий, значение>, где критерий - это функция, которые принимает на вход какие-то параметры

Google
Alexander
08.04.2017
13:12:20
Искать можно до первого попавшегося критерия

Java73
08.04.2017
13:48:35


Sergei
08.04.2017
14:38:01
Можно список туплов: <критерий, значение>, где критерий - это функция, которые принимает на вход какие-то параметры
это я и имел в виду, вообще такой вариант имеет смысл когда значений много, а если два или три то это решение только усложняет код, плюс еще куча есключений нужно перехватывать когда лезешь через задний ход. KISS

Paul
08.04.2017
16:05:53
ну да, банда четырёх вполне под детскую лит-ру подходит

Aleksandr
08.04.2017
16:26:03
как ее по акции прикупить?

Java73
08.04.2017
16:37:23
http://www.labirint.ru/books/87603/ уже другая какая-то акция

Aleksandr
08.04.2017
16:38:12
как в целом книжка?

Sergei
08.04.2017
16:39:15
По моим воспоминаниям - одна из лучших книг про практику ООП вообще.

/me ожидает забрасывание помидорами на тему "паттерны это вообще не ООП"

Aleksandr
08.04.2017
16:40:38
на самом питере она дешевле

https://www.piter.com/collection/all/product/priemy-obektno-orientirovannogo-proektirovaniya

я вот эту еще заказать хочу https://www.piter.com/collection/biblioteka-programmista/product/ekstremalnoe-programmirovanie-razrabotka-cherez-testirovanie

Sergei
08.04.2017
16:48:26
XP оно немного про другое, и даже не факт что про ООП

Sergei
08.04.2017
17:05:21
да, в некотором роде даже "сборник рецептов" - типа "в таких случаях неплохо работает такое вот..."

Paul
08.04.2017
17:29:59
Господа, положим вы тащите rss-ки и у постов может быть описание (почти всегда есть). Стоит ли в базе различать пустое описание и NULL или нет (то есть хранить с NOT NULL DEFAULT '')? Дискасс

da horsie
08.04.2017
17:30:45
ну тебе надо отличать null от ''?

Paul
08.04.2017
17:30:48
Аналогичный вопрос про теги (пустой массив и NULL)

ну тебе надо отличать null от ''?
Вопрос не в том, надо ли мне. Очевидно, что не надо Вопрос в том, логически в данном случае это одно и то же или нет

da horsie
08.04.2017
17:31:45
раз не надо, значит одно и то же

Google
da horsie
08.04.2017
17:32:51
у RDBMS иногда индексы по-разному работают для nullable полей

но я не понимаю, какое это имеет отношение к ооп

Paul
08.04.2017
17:33:11
Ну, блин. Это разница — между Maybe String и String

da horsie
08.04.2017
17:33:51
ну ты сказал, что бизнес-логика этой разницы не понимает

значит пофигу

Admin
ERROR: S client not available

Paul
08.04.2017
17:33:56
у RDBMS иногда индексы по-разному работают для nullable полей
ну, это КО. И в случае со строкой может менее эффективно получиться

@mkusher что думаешь?

Aleh
08.04.2017
17:35:47
думаю, что можно не ебать себе головы, пока не попросят обратного)

Paul
08.04.2017
17:36:19
Неспортивный ответ

Aleh
08.04.2017
17:37:46
да не, серьезное. Можешь выпытать у оунера, нужно ли это отличать с какими-нибудь примерами, а чисто по тому как в базе, я не дба, я ваще не загоняюсь

хоть ты в текст жсон пихай)

Paul
08.04.2017
17:39:47
Да забудь ты про БД. Пусть это не БД, а так, локальный тип. Поставим вопрсо так: нужно ли преобразовывать Maybe String в String, если бизнес-логике не нужно их различать?

Aleh
08.04.2017
17:40:10
думаю да

da horsie
08.04.2017
17:40:23
нужно делать так, как меньше кода и понятнее при сопровождении

как оно у тебя там " по умолчанию"? так и делай

Paul
08.04.2017
17:42:58
Да, но может быть не пустое описание, а состоящее только из пробелов. Не логичнее ли тогда сводить все незначащие описания к Nothing, нежели наоборот?

Ну, то есть на самом деле тебя интересует есть ли описание, а не "длина описания = 0". С этой точки зрения правильнее сводить не Nothing к пустоте, а пустоту к Nothing.

Пля, не надо было пить сегодн

pzrk
08.04.2017
17:47:24
сколько данных?

Google
Paul
08.04.2017
17:47:56
Речь не о производительности.

Хотя доводы выслушаю, если знаешь что будет быстрее.

Вангую, что со строками будут быстрее NULL-ы, а с численными типами — сведение к 0.

pzrk
08.04.2017
17:49:16
у тебя мускуль?

Paul
08.04.2017
17:50:33
Нет, посгрес

pzrk
08.04.2017
17:54:12
Paul
08.04.2017
17:56:45
Не, это ответ кодера

Где тут программисты, которые за логику пояснят

Потому что мне вот кажется, что надо сводить к Nothing, наоборот.

pzrk
08.04.2017
17:58:17
https://t.me/pgsql

Paul
08.04.2017
17:58:41
Причём тут это?

Зря я БД приплёл, разговор исключительно о типах

pzrk
08.04.2017
17:59:56
я бы к null сводил

Paul
08.04.2017
17:59:58
// но за чатик спасибо

я бы к null сводил
Тогда следующий вопрос, уже бд касается, ага: стоит ли в этом случае накладывать ограничения в БД, например (CHECK(length(description) > 0) или вообще с регулярочкой?

da horsie
08.04.2017
18:02:00
констрейнты это хорошо до тех пор, пока бизнес-логика в них не утекла

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