
Evgeny
26.11.2016
11:20:55
Ну это понятно, просто мб есть какая то последовательность? Я вот для себя вынес пока первое - разделение по полномочиям проверять

Alex
26.11.2016
11:21:26
Всмысле последовательность? В идеальном мире тестится все

Mikhail
26.11.2016
11:21:35
какая может быть последовательность. Перед тем как ты пишешь код, пиши на него тест
пишешь метод логики, пиши тест, потом пиши метод

Google

Evgeny
26.11.2016
11:22:13
Когда сайт конторе делал я много нашел косяков своих же, умные люди могли чужие сообщения например читать. Потом сел рефакторить и офигел от всего этого, вот тогда я понял, были бы тести сразу видно было бы где косяки

Mikhail
26.11.2016
11:23:06
Такой косяк в отсутствие тестов на авторизацию

Alex
26.11.2016
11:24:02
Таклй косяк потому что программист сам об этом не подумал

Mikhail
26.11.2016
11:24:15
ну если бы он писал тест, он сфокусировал бы внимание

Alex
26.11.2016
11:24:23
Просто тесты автоматизируют проверки и дисциплинируют проверять все кейсы.

Mikhail
26.11.2016
11:24:30
Вово, верно
и облегчают поддержку и прикручивание новых фич

Alex
26.11.2016
11:25:10
Ну и самое главное, внутри теста писать банально удобнее. Чистое повторяемое окружение
Где только то что ты тестируешь

Mikhail
26.11.2016
11:25:42
еще тесты способствуют лучшему коду
если ты незнаешь как протестить значит где то идея solid поломалась

Антон
26.11.2016
11:52:57
точнее S
OD помоему не применимо к рубям/рельсам
щас освежу

Google

Антон
26.11.2016
11:54:08
не OD, LD - сомнительно
даже понять не смог
L это типа
Service.run(arg)
должно вызывать Service.new(arg).run?
поясните :)
def self.run(arg)
Service.new(arg).run
end
def initialize
@arg = arg
end
def run
something
end
я правильно понял?
тогда это паттерна а не принцип
кароче SOLID притащили как есть, а он из C++ как есть в рубях выглядит странно

Mikhail
26.11.2016
11:59:32
эм что тебе в D не нравится

Антон
26.11.2016
11:59:48
O нагло наршуется рубями повсеместно

Mikhail
26.11.2016
12:00:15
ну и что
мы же говорим о построении своей аппы

Антон
26.11.2016
12:00:45
от SOLID остается S__I_

Mikhail
26.11.2016
12:01:09
не строй монстрских неповоротливых абстракций и будет тебе D

Антон
26.11.2016
12:02:19
ничего не понял
наоборот же
строй абстракции

Mikhail
26.11.2016
12:02:48
ключевое слово неповоротливых же
только общее описание, никаких деталей
хотя я слабо представляю рельсовых проект где куча абстракций
все обычно раскладывается на сервисы

Google

Антон
26.11.2016
12:04:07
ну допустим S__ID

Mikhail
26.11.2016
12:04:34
насчет O
это вроде песня, что манкипатчить зло
мне этот принцип не понятен из SOLID

Антон
26.11.2016
12:05:49
потому что это преимущество руби

Mikhail
26.11.2016
12:07:21
Ну идея в том, что если ты сделал класс, то его уже нельзя переназначать и его методы
а наследуя только расширять. Типа ты захотел расширить от него функционал и у тебя ничего не упадет

Антон
26.11.2016
12:08:14
а ты не можешь переназначить методы унаследованного класса в рубях

Mikhail
26.11.2016
12:08:15
Пиши класс такой, чтобы можно было наследовать и расширять, но не меняй его

Антон
26.11.2016
12:08:40
а ты не можешь :)

Mikhail
26.11.2016
12:09:21
что не могу, я могу запилить у дочки метод и переназначить его(но так делать нельзя).

Антон
26.11.2016
12:09:35
class B < A
def new
super
something
end
это уже метод класса B с ним можно все делать
но я не вижу возможностей сделать что-то с А

Mikhail
26.11.2016
12:11:35
я просто неудачно привел

Антон
26.11.2016
12:12:40
а я не знаю удачных примеров
может йопп знает

Mikhail
26.11.2016
12:13:12
У меня есть удачный пример, но увы не мой и с платного курса. Разглашать увы не могу
Ибо достался мне бесплатно

Антон
26.11.2016
12:14:17
дану падишта притянуто за уши с извращениями
и нужно закинуться чем-то чтобы так сделать

Mikhail
26.11.2016
12:15:15
Можно сказать адаптирован под руби, но идея та же
Ну я не тот человек, чтобы судить и оценивать более опытных и прошаренных спецов

Google

Mikhail
26.11.2016
12:16:26
Я еще не все попробовал, поэтому рассуждать на тему чужих примеров сложно. У меня наследование какое то сложное встречается ну очень редко. Чаще фигачу сервисы везде и всюду
может где то получается и не совсем DRY но достаточно понятно и юзабельно

Alex
26.11.2016
12:17:02
DRY тоже аккуратно надо юзать

Mikhail
26.11.2016
12:17:20
Я бы сказал, что DRY не надо ставить во главу разработки
А то иногда так DRYят проект, навешают 100500 абстракций что не ясно как этот зверь вообще работает
и вхождение в проект выходит не дни и недели, а месяцы

Антон
26.11.2016
12:18:11
"чем ты это сказал"
эффект йожыка

Mikhail
26.11.2016
12:18:44
Да бывает
Я не успеваю писать за своими мыслями?

Admin
ERROR: S client not available

Evgeny
26.11.2016
12:19:27
https://www.sitepoint.com/7-design-patterns-to-refactor-mvc-components-in-rails/?utm_medium=email&utm_campaign=SitePoint%20Ruby%20Newsletter%20-%20November%2022%202016&utm_content=SitePoint%20Ruby%20Newsletter%20-%20November%2022%202016+CID_13d8ae9f871f00a39b5e079f6d1c45ad&utm_source=CampaignMonitor%20SitePoint&utm_term=7%20Design%20Patterns%20to%20Refactor%20MVC
Все юзают эти паттерны?

Mikhail
26.11.2016
12:19:37
ооо древняя статья подкатила

Evgeny
26.11.2016
12:19:44
Или чего лишнего есть
Странно, в рубивикли была на неделе

Mikhail
26.11.2016
12:20:12
да это классические паттерны
я не юзают value object
мне просто не приходилось
ты думаешь паттерны меняются каждый месяц?

Google

Антон
26.11.2016
12:21:21
а то пример что я привел интеракторы назвается
только я не понимаю разницы между интеракторами и сервисами

Evgeny
26.11.2016
12:21:30
Не, я же не гуру проггер, но пытаюсь юзать норм варианты

Mikhail
26.11.2016
12:21:32
никакой

Evgeny
26.11.2016
12:21:40
Опередил Антон
Только спросить хотел

Mikhail
26.11.2016
12:22:03
Я в интеракторы вытаскиваю логику

Evgeny
26.11.2016
12:22:06
Они могли бы сделать метод success в сервисе верно?

Антон
26.11.2016
12:22:16
и в форм обджекте
это все по сути одно
интерактор/сервис/форм_обджект

Mikhail
26.11.2016
12:22:40
сервисы у меня чаще классы-обертки под апишки и сторонние сервисы, или какой то специфичный класс

Evgeny
26.11.2016
12:23:08
Я вот думаю рефакторить вьюхи как тут в примерах или нет, с одной стороны подумаешь html, он всегда был, сдругой стороны смотришь все лаконично

Mikhail
26.11.2016
12:23:27
Интеракторы это считалки логики

Антон
26.11.2016
12:23:48
PopularVideoQuery.new.call(Attachment.all).to_sql - адский изврат

Mikhail
26.11.2016
12:24:09
Это порно
вот такое точно не надо делать

Evgeny
26.11.2016
12:24:22
scope лучше?)

Mikhail
26.11.2016
12:24:59
это абстракция над сотнями скоупов

Антон
26.11.2016
12:25:34
scope не лучше, он просто есть :)

Mikhail
26.11.2016
12:25:37
и выборка может исходить из какой то сложной логики, в скоупах не очень логично складывать

Антон
26.11.2016
12:26:47
ну вот у меня парни написали скоуп
for_active_campaigns
который значит
joins(:campaigns).where(campaigns: { state: :active})
меня такое скорее путает

Mikhail
26.11.2016
12:26:51
Преждевременная оптимизация это как стрижка лысого