@oop_ru

Страница 191 из 785
Sergei
02.05.2017
20:47:26
"В итоге уменьшил зависимости до 4, но создал 2 доп класса, которые не имею смысла в отрыве от основного."

EmailFileSaver и LockerEmailSaver
что они делают в одном классе если:

блокировку осуществляет в базе
база и файл это разные вещи

Google
Артур Евгеньевич
02.05.2017
20:49:49
алгоритм такой был - проверяем нет ли блокировки - если нет то ставим -созраняем в базу часть инфы -сохраняем фалы аттачмента -сохраняем в базу ссылки на аттачмент -снимаем блокировку

это упрощенно конечно, там чуть больше действий и они в одном методе были почти все

Sergey
02.05.2017
20:50:19
этот класс
классы не нужны)

F01134H
02.05.2017
20:51:34
программирование не нужно

??

Aleh
02.05.2017
20:51:40
классы не нужны)
только в одноклассниках

но и они не нужны

Sergei
02.05.2017
20:51:56
не флудить

Sergey
02.05.2017
20:53:00
Помогите разобратсья в ситуцации. Был класс сохряняющий емайлы, и там было 7 зависимостей инжектом(логгер, файлсистем, энтитиманагер и т.д короче в основном все служебные) я добавил 8(токенайзер). Ну естественно я решил что 8 зависимостей это перебор, и решил слегка разбить класс. В итоге вынес отдельно все дела для работы с файловой системой, и убрал логирование из основного класса, добавив обертку с помощью деокрирования. В итоге уменьшил зависимости до 4, но создал 2 доп класса, которые не имею смысла в отрыве от основного. То есть по факту я не уменьшил число зависимостей, а просто пробросил их на уровень выше. На ревью мне скзаали, что раз сделал можно и оставить, но смысла большого в этой моей работе нет. Так вот сосбтсвенно вопрос, как определить, что класс обладает слишком большим числом зависиомостей, и рефакторинг действительно необходим??
> То есть по факту я не уменьшил число зависимостей на самом деле ты уменьшил количество зависимостей.

декоратору нужена другая реализация, если ты логирование туда вынес то как бы у тебя нет никаких проблем с зависимостями

более того, возможно все эти штуки у тебя будут принадлежать чуть разным модулям

Артур Евгеньевич
02.05.2017
20:54:11
ну там один бандл был

Sergey
02.05.2017
20:54:23
ну там один бандл был
бандлы не нужны

Google
Sergey
02.05.2017
20:54:41
ну и как бы не вопрос, внутри бандла могут быть еще модули

тебя никто ни в чем не ограничивает

Артур Евгеньевич
02.05.2017
20:55:02
а что под модулем понимается в данном контектсе?

Sergey
02.05.2017
20:56:00
а что под модулем понимается в данном контектсе?
модуль = элемент декомпозиции системы. Представь себе систему как граф больших модулей которые тоже состоят из модулей по меньше и тд.

"бандлы" - это тоже модули, которые можно делать не бандлами а просто модулями.

Sergey
02.05.2017
20:57:25
это упрощенно конечно, там чуть больше действий и они в одном методе были почти все
есть мнение что можно сделать класс декларирующий всю эту логику (последовательность действий) и если там не будет if-ов то можно хоть 20 зависимостей туда пихать (хотя конечно меньше лучше)

то есть в этом случае у тебя был бы один метод где записан эдакий "сценарий" чего делать. Дела уже будут делегироваться отдельным объектам

но зато всю бизнес логику, весь юзкейс был бы как на ладони

Артур Евгеньевич
02.05.2017
20:58:11
по факту у меня тоже самое и вышло, только тут еще отдельно вынесен DBStorage. Как бы направление то я верное выбрал, но пока делал не покидала ощущение, что делаю что то бессмысленное, просто из одного горшка в другой перекладываю, только увеличивая число горшков

Артур Евгеньевич
02.05.2017
20:58:30
Sergey
02.05.2017
20:58:48
А тестировать как?
вот я там чуть выше описал

каждый стэп алгоритма - отдельные объекты которые легко тестить. И один позитивный интеграционный тест на весь юзкейс

штуки типа логирования действительно удобно в декораторы выносить

Sergey
02.05.2017
20:59:46
А тестировать как?
DI точек в эти несколько строк кода просто добавь.

Sergey
02.05.2017
20:59:49
это единственное что явно не относится к основной логике и этому не место будет в нашем классе-юзкейсу

Google
Sergey
02.05.2017
21:00:24
2-3 зависимости на объект не больше. Иначе надо избавляться от логики в классе и выносить в другие объекты

(иногда можно наплевать на это и сделать жирные штуки с пометками "отрефакторить когда буду лучше понимать как это должно работать и как это будет использоваться")

Артур Евгеньевич
02.05.2017
21:02:32
мне кажетс должен баланс все таки быть, в некоторых моментах все таки лучше чуть переборщить с зависимостями, чем городить многоступенчатую иерархию

пока так ка кто ощущаю

Sergey
02.05.2017
21:05:18
да прибудит с вами high cohesion и low coupling

код все-таки должен быть читаемый, а прыгать из файла в файл что бы восстановить флоу так себе веселье, тем более что можно сделать все грамотно и без этого

Артур Евгеньевич
02.05.2017
21:06:43
вообще у меня интересные ощущения сецчас, вроде много всего поначитался нахватался в плане архитектурных "бест практикс" но вот когда работаю с кодом, то ощущаю что четкого понимания и осознания нет, когда и как что лучше сделать

Sergey
02.05.2017
21:07:22
Артур Евгеньевич
02.05.2017
21:07:31
код все-таки должен быть читаемый, а прыгать из файла в файл что бы восстановить флоу так себе веселье, тем более что можно сделать все грамотно и без этого
ага, но вот это противоречит помоему утверждению, что все лучше максимлаьно дробить на маленькие классы?

Sergey
02.05.2017
21:07:31
и никак не решают проблему "прыжков"

Roman
02.05.2017
21:07:37
Ну иерархия всеж

Артур Евгеньевич
02.05.2017
21:07:46
Sergey
02.05.2017
21:08:11
ага, но вот это противоречит помоему утверждению, что все лучше максимлаьно дробить на маленькие классы?
не "классы" а "объекты". И "маленькие" не по количеству кода (хотя часто оно так и выходит) а по ответственности которая на объектах лежит.

просто интересно как другие люди трактуют

Ну иерархия всеж
воспринимай неймспейсы как способ декларации модулей.

во всяком случае я так делаю и это так вполне удобно

а потом подумай нужны ли тебе модули состоящие из 10-ти уровней?

Google
Roman
02.05.2017
21:10:19
а потом подумай нужны ли тебе модули состоящие из 10-ти уровней?
Да я больше двух уровней вариантов не встречал

Sergey
02.05.2017
21:10:41
или там App/Entity?

Roman
02.05.2017
21:10:59
Sergey
02.05.2017
21:11:09
Entity/User?

или User/Entity?

что предпочитаешь?

(ну или Users/Model)

Roman
02.05.2017
21:11:41
Видел код игрухи на джаве. Там 2 или 3 было

Sergey
02.05.2017
21:12:04
Admin
ERROR: S client not available

Артур Евгеньевич
02.05.2017
21:12:11
не "классы" а "объекты". И "маленькие" не по количеству кода (хотя часто оно так и выходит) а по ответственности которая на объектах лежит.
Принципы расположения смысловых блоков кода в системе( по модулям, слоям, классам, компонентам и т.д) призванные сделать работу с этим кодом максимально понятной и удобной. Иными словами под работой над архитектурой я понимаю проектирвоание системы с расчетом на максимально простое развитие, модификацию и поддержку

как то криво сказал, но думаю суть моего взгляда понятна

Sergey
02.05.2017
21:14:43
Принципы расположения смысловых блоков кода в системе( по модулям, слоям, классам, компонентам и т.д) призванные сделать работу с этим кодом максимально понятной и удобной. Иными словами под работой над архитектурой я понимаю проектирвоание системы с расчетом на максимально простое развитие, модификацию и поддержку
мой вариант - "архитектура - набор ограничений которые разработчики накладывают на разрабатываемую систему дабы добиться определенных характеристик этой системы". К примеру - нам нужно независимо деплоить куски системы - микросервисы, нам нужна возможность полной замены инфраструктуры - гексагональная архитектура. Ну и т.д.

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

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

ну и с "размерами" тоже веселье - их нельзя мерять строками кода

куча субъективщины короче

и это делает все очень сложным

f4rt~
02.05.2017
21:16:41
лучшее определение, что я читал)

Google
Sergey
02.05.2017
21:17:01
я у Роя Филдинга стырил

f4rt~
02.05.2017
21:17:09
@fes0r ты принял приглашение devconf или как его там?

Sergey
02.05.2017
21:17:40
@fes0r ты принял приглашение devconf или как его там?
ну не то что бы "принял" - мне надо придумать что засылать на рассмотрение

f4rt~
02.05.2017
21:17:53
с темой еще не определился?

Sergey
02.05.2017
21:18:18
с темой еще не определился?
ну тип того, меня просто еще кое куда позвали и там временные рамки слишком плотные выходят

а на devconf попробую запихнуть знакомого

он харизматичнее меня)

f4rt~
02.05.2017
21:18:52
харизма лишь малая часть)

Sergey
02.05.2017
21:18:58
правда он скорее в pm-скую ветку пойдет жечь пуканы

харизма лишь малая часть)
ну насколько я понял уровень разработчиков на devconf чуть повыше, а мне хочется вещать на темы которые больше новичкам подходят

f4rt~
02.05.2017
21:20:17
ты прям идеальный ментор, на работе джуны поди в очередь собираются)

Sergey
02.05.2017
21:20:25
нет джунов - нет проблем

ну то есть, если мне интересно - я терпилив. А если нет и кто-то тупит - я злюсь

f4rt~
02.05.2017
21:21:32
ну погоди, ты же сам говоришь, хочешь дарить знания новичкам) следовательно тебе самому это необходимо)

разве кто то выбирает ментора по духу?)

Sergey
02.05.2017
21:22:04
ну погоди, ты же сам говоришь, хочешь дарить знания новичкам) следовательно тебе самому это необходимо)
тут с другой стороны надо смотреть. Ты когда материал пытаешься донести другим - ты сам в этом прошариваешься. Для меня это повод переваривать информацию.

f4rt~
02.05.2017
21:22:14
это да

+ еще свежий взгляд, не всегда конечно от этого много пользы, но все равно)

Sergey
02.05.2017
21:22:30
пойду чистить свой говнокод(

f4rt~
02.05.2017
21:22:39
давай, сорре что отвлек)

da horsie
02.05.2017
21:32:45
Я бы архитектуру в смысле software design определил как свойство системы (как совокупности программного кода) адаптироваться под изменяющиеся требования к ней, где источником требований являются потребители бизнес-процессов, которые реализует система. Если система адаптируется быстро и дешево - это хорошая архитектура. Если долго и при этом часто ломается (перестает соответствовать внешним требованиями) - плохая.

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