
Like
02.05.2017
16:17:49
Кстати, главный вопрос: офис или удаленка(не фриланс) ?
Сильно застряну "в прошлом", если начну с удаленки?)

Sergey
02.05.2017
16:19:26
у Симфони получше но это потому что со спринга крали

Like
02.05.2017
16:21:10

Google

Roman
02.05.2017
16:39:36
сам целюсь уйти однажды на пляж жаркой страны

Like
02.05.2017
16:42:16

Roman
02.05.2017
16:42:44
это такой же вопрос об идеальном паттерне для апи)
зависит только от самого тебя
при любом выборе важно разделять место где ты работаешь от места где ты отдыхаешь

Sergey
02.05.2017
16:52:45
ищи себе команду
один ты далеко не уедешь
ну то есть уедешь но ехать будешь долго
и не ной что мол "ну это ж надо на работу ходить и работу работать"
это как искать "идеальный паттерн для ecommerce"

Google

Sergey
02.05.2017
16:54:40
или там "идеальный паттерн для банка"

Roman
02.05.2017
16:55:25

Like
02.05.2017
16:56:27
Ладно, тогда из всех 45и вакансий (минус 20: Middle/senior) постараюсь выбрать что-то годное :D
Спасибо )

Sergey
02.05.2017
16:57:08

Roman
02.05.2017
16:57:45

Sergey
02.05.2017
16:57:59
тогда адаптер)

Roman
02.05.2017
16:58:11
ок)))

Алексей
02.05.2017
16:59:26

Sergey
02.05.2017
17:11:18
потому лекции в университетах и не эффективны
могз не думает

Алексей
02.05.2017
17:16:10

Aleh
02.05.2017
17:16:43
или полиция в бобик зашла, ага)

Sergey
02.05.2017
17:16:57
хз, меня не отвлекает

Алексей
02.05.2017
17:17:21
меня аж укачало :)

Aleh
02.05.2017
17:17:29

Алексей
02.05.2017
17:18:19

Aleh
02.05.2017
17:18:40
ага, во второй части там и про раст, и про типы вообще)

Roman
02.05.2017
17:24:37

Google


Sergei
02.05.2017
19:53:54
Выделить все самое главное путем "скрытия" всего мещающего :D
Насчет эттапа:
Добиваю солид на практике (Лисков так и не понял :D), паралелльно смотрю паттерны
lsp - допустим есть тип Птица и есть подтипы: орёл, цапля, воробей. Все птицы умеют летать и во всех местах программы вместо птицы можно будет подставить три эти реализации и всё будет работать.
Substitutability is a principle in object-oriented programming stating that, in a computer program, if S is a subtype of T, then objects of type T may be replaced with objects of type S (i.e. an object of type T may be substituted with any object of a subtype S) without altering any of the desirable properties of T (correctness, task performed, etc.). More formally, the Liskov substitution principle (LSP) is a particular definition of a subtyping relation, called (strong) behavioral subtyping,
Но есть ещё пингвин, который летать не умеет но он ЯВЛЯЕТСЯ птицей, добавляем пингвина в нашу программу и опять говорим всем птицам лететь, все выполняют команду, пингвин бросает UnsupportedOperationException. Или пингвин должен летать, т.к. он ЯВЛЯЕТСЯ птицей или он не должен быть птицей. Пингвин это нарушение lsp, пример из реального мира: java collection framework.


Артур Евгеньевич
02.05.2017
19:58:03
lsp - допустим есть тип Птица и есть подтипы: орёл, цапля, воробей. Все птицы умеют летать и во всех местах программы вместо птицы можно будет подставить три эти реализации и всё будет работать.
Substitutability is a principle in object-oriented programming stating that, in a computer program, if S is a subtype of T, then objects of type T may be replaced with objects of type S (i.e. an object of type T may be substituted with any object of a subtype S) without altering any of the desirable properties of T (correctness, task performed, etc.). More formally, the Liskov substitution principle (LSP) is a particular definition of a subtyping relation, called (strong) behavioral subtyping,
Но есть ещё пингвин, который летать не умеет но он ЯВЛЯЕТСЯ птицей, добавляем пингвина в нашу программу и опять говорим всем птицам лететь, все выполняют команду, пингвин бросает UnsupportedOperationException. Или пингвин должен летать, т.к. он ЯВЛЯЕТСЯ птицей или он не должен быть птицей. Пингвин это нарушение lsp, пример из реального мира: java collection framework.
Классное объяснение, даже нагляднее чем квадрат и прямоугольник)


Like
02.05.2017
20:01:15
lsp - допустим есть тип Птица и есть подтипы: орёл, цапля, воробей. Все птицы умеют летать и во всех местах программы вместо птицы можно будет подставить три эти реализации и всё будет работать.
Substitutability is a principle in object-oriented programming stating that, in a computer program, if S is a subtype of T, then objects of type T may be replaced with objects of type S (i.e. an object of type T may be substituted with any object of a subtype S) without altering any of the desirable properties of T (correctness, task performed, etc.). More formally, the Liskov substitution principle (LSP) is a particular definition of a subtyping relation, called (strong) behavioral subtyping,
Но есть ещё пингвин, который летать не умеет но он ЯВЛЯЕТСЯ птицей, добавляем пингвина в нашу программу и опять говорим всем птицам лететь, все выполняют команду, пингвин бросает UnsupportedOperationException. Или пингвин должен летать, т.к. он ЯВЛЯЕТСЯ птицей или он не должен быть птицей. Пингвин это нарушение lsp, пример из реального мира: java collection framework.
Спасибо большое )


Sergei
02.05.2017
20:02:31

Like
02.05.2017
20:02:43
На хабре статья про солид и там lsp с квадратом и прямоугольником описывается

Артур Евгеньевич
02.05.2017
20:03:49

Sergei
02.05.2017
20:03:52
Обычно официальные обьяснения паттернов и принципов слишком сухие, а человек намного лучше понимает аналогии.

Like
02.05.2017
20:04:13

Артур Евгеньевич
02.05.2017
20:04:46
мне про паттерны вот нравится сайтец https://refactoring.guru/ru
ну там ток банды 4 разбираются


f4rt~
02.05.2017
20:05:02
lsp - допустим есть тип Птица и есть подтипы: орёл, цапля, воробей. Все птицы умеют летать и во всех местах программы вместо птицы можно будет подставить три эти реализации и всё будет работать.
Substitutability is a principle in object-oriented programming stating that, in a computer program, if S is a subtype of T, then objects of type T may be replaced with objects of type S (i.e. an object of type T may be substituted with any object of a subtype S) without altering any of the desirable properties of T (correctness, task performed, etc.). More formally, the Liskov substitution principle (LSP) is a particular definition of a subtyping relation, called (strong) behavioral subtyping,
Но есть ещё пингвин, который летать не умеет но он ЯВЛЯЕТСЯ птицей, добавляем пингвина в нашу программу и опять говорим всем птицам лететь, все выполняют команду, пингвин бросает UnsupportedOperationException. Или пингвин должен летать, т.к. он ЯВЛЯЕТСЯ птицей или он не должен быть птицей. Пингвин это нарушение lsp, пример из реального мира: java collection framework.
в таком случае больше интерфейсов == лучше


Like
02.05.2017
20:05:19

Артур Евгеньевич
02.05.2017
20:05:58
мне не оч понравился, там некоторые слишком сухо описаны

Like
02.05.2017
20:06:19

Evgeniy
02.05.2017
20:07:34
но про паттерны наоборот не особо понравилось хотя лучше чем почти везде

Sergei
02.05.2017
20:08:02
Кто то хочет поспорить, нарушает ли java collection framework lsp или нет?

Google

Артур Евгеньевич
02.05.2017
20:08:18
а вот про Cohesion & Coupling мне непонятно до конца, что считается модулем в объяснениях,что внутри модуля должна быть высокая связанность

Evgeniy
02.05.2017
20:08:27

Like
02.05.2017
20:08:39
Чертов ооп

Артур Евгеньевич
02.05.2017
20:08:54
а мне про запахи кода
ну да я щас рефакторинг фаулера читаю, там тоже глава про запахи, но на сайте как то живее описана

Evgeniy
02.05.2017
20:09:09
да там неплохо описано

Like
02.05.2017
20:09:09

Артур Евгеньевич
02.05.2017
20:09:25
некоторые советвы слишком капитанские

Admin
ERROR: S client not available

Evgeniy
02.05.2017
20:09:25
а главное написано о том что если начинаешь одним рефакторингом злопутореблять
пишется к чему приводит

Артур Евгеньевич
02.05.2017
20:09:44
типо параметретизация метода

Evgeniy
02.05.2017
20:09:44
но эти книги надо читать с неким опытом

Артур Евгеньевич
02.05.2017
20:10:12
и написано что addRow(5) лучше чем addFiveRow()

Sergei
02.05.2017
20:10:25
а какая разница)
Ну вообще то хотелось бы знать точно, я думаю что скорее да чем нет, но в то же время то что некоторые методы могут работать или бросать исключения написано в интерфейсе, но если я получу к примеру 5 экземпляров этого интерфейса, я не могу узнать в каком из каких я могу вызывать определённые методы или нет, вот если бы был флаг isUnmodifiable тогда да, но его нет.

Evgeniy
02.05.2017
20:11:11
ну тут вопрос скорее философский в Java collection
это очень популярная штука
и шанс повлиять и сделать так как хочется кому то очень сложно
поэтому Java collection скорее воспринимать как данность а хорошо или плохо

Google

Evgeniy
02.05.2017
20:11:57
хз, всегда что то хорошо что то плохо

Евгений
02.05.2017
20:12:00

Evgeniy
02.05.2017
20:12:03
имхо естественно

Sergei
02.05.2017
20:12:50
это очень популярная штука
Это да, но если долго время смотреть туда и не только, то можно увидеть всякие нехорошие штуки. Но это скорее относиться к первым версиям, а те классы уже не выпилить т.к. обратная совместимось. Но и в некоторых местах тоже встречаются нарушения но не так часто.


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


Sergei
02.05.2017
20:24:26

f4rt~
02.05.2017
20:24:53

Евгений
02.05.2017
20:25:17
MeaninglessClassOne и MeaninglessClassTwo )

Артур Евгеньевич
02.05.2017
20:25:50
EmailFileSaver и LockerEmailSaver
торой я сначала назвал LockerEmailSaverDecorator но слово декоратор скзаали убрать потом)

Sergei
02.05.2017
20:27:01
А lockerEmail что делает?

Артур Евгеньевич
02.05.2017
20:27:13
Ну а основной класс EmailSaver там сохарнения мыла в базу, сохранение аттачментов и т.д
я поэтому и декоратор применил, т.к блокировка вызывается преед сохранением, а снимается после, т.е удобно было обернуть основной код

Sergei
02.05.2017
20:28:07
и есть еще класс Email?

Артур Евгеньевич
02.05.2017
20:28:30
да, но он не передается в конструктор
это ENtity
она в парамтеры метода save передается

Sergei
02.05.2017
20:40:36