Re[9]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 19:58
Оценка:
Здравствуйте, andyag, Вы писали:

A>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, andyag, Вы писали:


A>>>Эти штуки C#/.NET безусловно рвут Java в плане скорости разработки и защиты от ошибок, но всё что вы перечислили нужно писать в каких-то методах, а методы — в каких-то классах.

G>>Для Linq все методы являются методами-расширениями, которые по сути стирают различия между method(a,b) a.method(b). А классы в этом случае не более чем пространства имен. В новом C# имена классов можно писать в using и не использовать квалифицированные имена методов других классов.

A>Благодаря тому, что в последние несколько лет в C# регулярно появляется всё больше не-чисто-ООПшных штук, вполне ожидаемо, что в C# комьюнити появляются люди, которые пытаются всё тянуть под эти самые не-ООПшные штуки. Но за этим ничего нет — просто обязательно кто-то будет пытаться убедить оппонента, что в C# можно делать всё по-другому. Можно. А зачем?


1) меньше кода
2) больший контроль со стороны компилятора
3) меньше связность
4) Чистые функции (меньше ошибок)


G>>Да и вообще есть scriptcs, в котом классы в C# писать не обязательно.

A>В мире Java есть Groovy — тоже можно не писать классы. К чему это?
Ты не понял? groovy это другой язык, а scriptcs это тот же самый C#, в котором нет необходимости писать классы.


A>>>И где-то в этой точке одновременно появляются паттерны и исчезает разница между .NET и Java.

G>>Нет такой точки самой по себе. Она только в голове программиста.

A>Такая точка появляется при любой попытке заинтегрировать свой LINQ-only код с 99% фреймворков — начиная с MSTest/NUnit, где надо писать классы и вешать на них аттрибуты, и заканчивая ASP.NET WebAPI, где вообще от ApiController наследоваться нужно.

Открою тайну, в ASP.NET 5 уж не нужно ни от чего наследоваться. там все на conventions сделано. Да и раньше достаточно было реализовать IController только. ControllerBase нужен только для того, чтобы методы вызывать без префикса-имени класса. А, как уже писал выше в C# новой версии это не нужно, поэтому и потребность в базовом классе отпала, а да и в каком либо интерфейсе.


Просто ASP.NET MVC появился тогда, когда появился .NET 3.5 и на тот момент ООП еще будоражило умы людей. А webapi тупо скопировал дизайн ASP.NET MVC. Прошло 5 лет и народ попроще стал относится к ООП, перестал плодить абстрактные фабрики стратегий.


A>>>Не поймите меня неправильно: я последние несколько лет пишу параллельно на C# и Java, отлично понимаю разницу между одной выразительной строчкой на LINQ и сотней плохочитаемых строчек в JPA, отлично знаю какой это геморрой делать UI без async/await. Но это всё просто инструменты языка — где-то они заменяют нагромождение классов, где-то уменьшают это нагромождение, а где-то от них ни холодно, ни жарко.

A>>>ИМХО, вещи совершенно параллельные.
G>>Самое главное что эти методы позволяют по другому строить программы. Не как рекурсивную композицию объектов, а как композицию функций.
A>Не соглашусь. Эта ценность есть только у вас в голове.
Ну не соглашайся, твое дело.
Попробуй просто на досуге собрать на принципах ООП (применяя любые паттерны из GOF) чтонить вроде linq.
Отредактировано 25.12.2014 20:08 gandjustas . Предыдущая версия .
Re[10]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: dimgel Россия https://github.com/dimgel
Дата: 25.12.14 20:17
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Открою тайну, в ASP.NET 5 уж не нужно ни от чего наследоваться. там все на conventions сделано.


Обычно это означает — меньший контроль со стороны компилятора.
Re[9]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 20:18
Оценка: +1
Здравствуйте, andyag, Вы писали:

A>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, andyag, Вы писали:


A>>>Здравствуйте, gandjustas, Вы писали:


G>>>>2) паттерн претендуют на незвисимость от языка и платформы

A>>>Неправда. Если взять паттерны GoF, речь "официально" идёт только о языках, умеющих ООП. Прямо на обложке написано.
G>>И неправильно написано. Речь идет о языках, умеющих только ООП. Почувствуй разницу.

A>Это какой-то флуд уже пошёл. Не бывает языков, которые умеют _только_ ООП.

Как это? simula, smalltalk, C++ ранних версий. Там кроме ООП практически нет средств и подульности, ни композиции.

A>>>К чему тут слово "платформа" — не понял.

G>>Например MVC, про который говоритс в GOF совершенно не нужен в WPF, где во всю рулит MVVM.

A>MVC в GoF? Вы уверены, что читали книгу?

Уверен, а ты?
В русском издании раздел 1.2 имеет название" Паттерны проектирования в схеме MVC в языке Smalltalk".


A>Если стоит задача "не применять", то не-применять можно всё что угодно. Почему это должны быть именно паттерны GoF?

Потому что их слишком легко применять неправильно и не к месту.

G>>Когда изучишь 50 способов сделать тоже самое, то поймешь почему паттерны не нужно применять.

A>Сомнительный подход. Не получится потом, что находишь себя 40-летним дядькой, который единственное что умеет — делать одну и ту же ненужную хрень 50 разными способами?
Для начала попробуй сделать ProblemK хотя бы на 10 разных яызках.
После этого можешь броить разработку, написать книгу по архитектуре и проводить безумно дорогие тренинги для неофитов.
Re[11]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 20:31
Оценка:
Здравствуйте, dimgel, Вы писали:

D>Здравствуйте, gandjustas, Вы писали:


G>>Открою тайну, в ASP.NET 5 уж не нужно ни от чего наследоваться. там все на conventions сделано.


D>Обычно это означает — меньший контроль со стороны компилятора.


А раньше какой контроль был?

Пример
public class HomeController: Controller
{
    ActionResult Index()
    {
       return View();
    }
}


Какие использовались соглашения:
1) Имя класса контроллера заканчивается на Controller
2) Action возвращает ActionResult (хотя может возвращать что угодно, главное не void)
Что из них проверяется компилятором? Внезапно ничего.

Единственная ценность наследования в данном случае — это писать return View(), а не return new ViewResult().
Но в новом C# можно написать return View(), даже если метод View находится в другом классе.
Re[10]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: andyag  
Дата: 25.12.14 20:39
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, andyag, Вы писали:


A>>Это какой-то флуд уже пошёл. Не бывает языков, которые умеют _только_ ООП.

G>Как это? simula, smalltalk, C++ ранних версий. Там кроме ООП практически нет средств и подульности, ни композиции.

Есть объектно-ориентированный дизайн, а есть средства для его реализации. Наличие классов/объектов на уровне языка совершенно не означает, что любая программа на этом языке будет ОО. Точно так же как и в языках без поддержки ООП из коробки можно самостоятельно сделать своё ООП. В первом случае программиста назовут идиотом, потому что он использует "слишком мало" возможностей языка, во втором случае — потому использует язык, возможностей которого не хватает для избранного подхода к дизайну.

A>>MVC в GoF? Вы уверены, что читали книгу?

G>Уверен, а ты?
G>В русском издании раздел 1.2 имеет название" Паттерны проектирования в схеме MVC в языке Smalltalk".
Сорри — утверждение проинтерпретировалось как "MVC — паттерн из GoF". То что он там где-то в районе предисловия был вполне допускаю.

A>>Если стоит задача "не применять", то не-применять можно всё что угодно. Почему это должны быть именно паттерны GoF?

G>Потому что их слишком легко применять неправильно и не к месту.
Ага, то ли дело — изучить ФП.

G>>>Когда изучишь 50 способов сделать тоже самое, то поймешь почему паттерны не нужно применять.

A>>Сомнительный подход. Не получится потом, что находишь себя 40-летним дядькой, который единственное что умеет — делать одну и ту же ненужную хрень 50 разными способами?
G>Для начала попробуй сделать ProblemK хотя бы на 10 разных яызках.
Спасибо, изучением миллионов языков я уже переболел, парсеры и обход графа делать умею.
Re[12]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: dimgel Россия https://github.com/dimgel
Дата: 25.12.14 20:45
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Какие использовались соглашения:

G>1) Имя класса контроллера заканчивается на Controller
G>2) Action возвращает ActionResult (хотя может возвращать что угодно, главное не void)
G>Что из них проверяется компилятором? Внезапно ничего.

Если так, то может быть. Но у меня кроме Index() обычно ещё куча всяких вспомогательных методов в контроллере (проверка прав, например; а в случае REST-двигла там вообще развесистый template method), и наследование начинает рулить со страшной силой: code completion, защита от опечаток и т.п. В этой связи я когда-то высказывался (в теме, называвшейся что-то типа "что вам не нравится в языках, на которых вы пишете") про жаву, что ейные фреймворки целиком на POJO+аннотациях вместо наследования — уничтожают саму идею статики.
Re[11]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 21:05
Оценка:
Здравствуйте, andyag, Вы писали:

A>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, andyag, Вы писали:


A>>>Это какой-то флуд уже пошёл. Не бывает языков, которые умеют _только_ ООП.

G>>Как это? simula, smalltalk, C++ ранних версий. Там кроме ООП практически нет средств и подульности, ни композиции.

A>Есть объектно-ориентированный дизайн, а есть средства для его реализации. Наличие классов/объектов на уровне языка совершенно не означает, что любая программа на этом языке будет ОО.

Прекрасный вывод, но кажется полдня назад ты утверждал что

A>всё что вы перечислили нужно писать в каких-то методах, а методы — в каких-то классах. И где-то в этой точке одновременно появляются паттерны



A>Точно так же как и в языках без поддержки ООП из коробки можно самостоятельно сделать своё ООП. В первом случае программиста назовут идиотом, потому что он использует "слишком мало" возможностей языка, во втором случае — потому использует язык, возможностей которого не хватает для избранного подхода к дизайну.

И как же люди на haskell или scheme пишут... там вообще классов нет. Да и линукс написан на голом С без классов.
Видимо в ООП не так много ценности, что его так игнорируют и не страдают.

A>>>MVC в GoF? Вы уверены, что читали книгу?

G>>Уверен, а ты?
G>>В русском издании раздел 1.2 имеет название" Паттерны проектирования в схеме MVC в языке Smalltalk".
A>Сорри — утверждение проинтерпретировалось как "MVC — паттерн из GoF". То что он там где-то в районе предисловия был вполне допускаю.
Его жизнь началась с GOF, до этого никто не слышал о таком. Если посмотреть историю, то до GOF было два упоминания MVC в публичном доступе, что в отсутствии повсеместного доступа в интернет означало, что об MVC не знал никто.
По сути до появления массового общедоступного интернета знания распространялись только в книгах. Сейчас таким носителем служат скорее блоги, записи выступлений, вебкасты? презентации и StackOverflow.


G>>>>Когда изучишь 50 способов сделать тоже самое, то поймешь почему паттерны не нужно применять.

A>>>Сомнительный подход. Не получится потом, что находишь себя 40-летним дядькой, который единственное что умеет — делать одну и ту же ненужную хрень 50 разными способами?
G>>Для начала попробуй сделать ProblemK хотя бы на 10 разных яызках.
A>Спасибо, изучением миллионов языков я уже переболел, парсеры и обход графа делать умею.
Вот в этом и фишка. Парсеры и обходы графов умеют многие, а сделать из этого приложение, выполняющее осмысленные действия — почти никто. И ключевой навык нужный для этого — композиция.
Поэтому и полезно решать такие задачи, причем на разных языках, потому что появляется навык применять нереальное число способов композиции.

ЗЫ. Кстати в книге pragmatic programmer, о которой я выше писал, рекомендуется изучать по одному языку в год.
Re[10]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: andyag  
Дата: 25.12.14 21:12
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, andyag, Вы писали:


A>>Благодаря тому, что в последние несколько лет в C# регулярно появляется всё больше не-чисто-ООПшных штук, вполне ожидаемо, что в C# комьюнити появляются люди, которые пытаются всё тянуть под эти самые не-ООПшные штуки. Но за этим ничего нет — просто обязательно кто-то будет пытаться убедить оппонента, что в C# можно делать всё по-другому. Можно. А зачем?


G>1) меньше кода

G>2) больший контроль со стороны компилятора
G>3) меньше связность
G>4) Чистые функции (меньше ошибок)

Это ваша субъективная любовь к ФП или есть какие-то исследования, где 2 группы обезьян пишут на ФП и ООП?

A>>В мире Java есть Groovy — тоже можно не писать классы. К чему это?

G>Ты не понял? groovy это другой язык, а scriptcs это тот же самый C#, в котором нет необходимости писать классы.

До тех пор пока оно не компилируется csc, это не C#. Если вы закрываете на это глаза, Groovy ничем не отличается от Java кроме необязательности классов.

A>>Такая точка появляется при любой попытке заинтегрировать свой LINQ-only код с 99% фреймворков — начиная с MSTest/NUnit, где надо писать классы и вешать на них аттрибуты, и заканчивая ASP.NET WebAPI, где вообще от ApiController наследоваться нужно.

G>Открою тайну, в ASP.NET 5 уж не нужно ни от чего наследоваться. там все на conventions сделано. Да и раньше достаточно было реализовать IController только. ControllerBase нужен только для того, чтобы методы вызывать без префикса-имени класса. А, как уже писал выше в C# новой версии это не нужно, поэтому и потребность в базовом классе отпала, а да и в каком либо интерфейсе.

Не расслышал — вы говорите, всё ещё надо классы писать или мне показалось?
Re[12]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: andyag  
Дата: 25.12.14 21:39
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, andyag, Вы писали:


A>>Здравствуйте, gandjustas, Вы писали:


G>>>Здравствуйте, andyag, Вы писали:


A>>Есть объектно-ориентированный дизайн, а есть средства для его реализации. Наличие классов/объектов на уровне языка совершенно не означает, что любая программа на этом языке будет ОО.

G>Прекрасный вывод, но кажется полдня назад ты утверждал что
G>

A>>всё что вы перечислили нужно писать в каких-то методах, а методы — в каких-то классах. И где-то в этой точке одновременно появляются паттерны

Если есть какое-то противоречие, я его не вижу. Давайте по-другому попробую. Если язык говорит, что через конструкцию "class XXX { ... }" можно описывать ООПшные классы, это:
1. во-первых не означает, что ООПшные классы нужно описывать именно этой конструкцией
2. во-вторых не означает, что этой конструкцией можно описывать только ООПшные классы

A>>Точно так же как и в языках без поддержки ООП из коробки можно самостоятельно сделать своё ООП. В первом случае программиста назовут идиотом, потому что он использует "слишком мало" возможностей языка, во втором случае — потому использует язык, возможностей которого не хватает для избранного подхода к дизайну.

G>И как же люди на haskell или scheme пишут... там вообще классов нет. Да и линукс написан на голом С без классов.
G>Видимо в ООП не так много ценности, что его так игнорируют и не страдают.
Т.е. если кто-то пишет на Haskell, в котором не классов, и у него нет проблем, всем нужно всё бросить и переходить на Haskell?
Есть ещё другие люди — они пишут на C#, в котором есть классы, и у них тоже нет проблем. Всем нужно всё бросить и переходить на C#?
Абсолютно пофигу, если кто-то счастлив работать с инструментами, которые сильно отличаются от моих или ваших. У людей разная мотивация: кто-то "работает программистом", кто-то любит "программирование", а кто-то любит "делать всякие штуки". Первому, очевидно, вообще всё пофигу — лишь бы не уволили. Второй наизусть помнит все задачки из SICP. Третий с большей радостью сделает какой-то новый недопродукт и заставит людей на него смотреть, чем будет вспоминать что делает этот кусок на Scheme, который ещё 10 минут назад казался абсолютно понятным.

G>ЗЫ. Кстати в книге pragmatic programmer, о которой я выше писал, рекомендуется изучать по одному языку в год.

Это одна из моих всею душою любимых книг.
Re[2]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: dimgel Россия https://github.com/dimgel
Дата: 25.12.14 21:55
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Про MVC — нет такого, до GOF цельной инфы об MVC не было, да и GOF не внесли ясности. Разве что тут — http://rsdn.ru/forum/design/5406934.1
Автор: gandjustas
Дата: 23.12.13


У Фаулера была статья, где он разбирал все эти MVC, MVP и т.п. Рассказ, помнится, начинался с утверждения, что нынче обзывают MVC всё что ни попади, а термин идёт от smalltalk и ихний самый первый и потому истинный MVC выглядел так: ... Как он выглядел, не помню, и вообще никакой конкретики оттуда не помню, да и пофиг, потому что меня поразило, насколько все эти паттерны друг на дружку похожи. Буквально: одним крошечным рефакторингом друг в дружку превращаются. Я хз как такое вообще запомнить и имеет ли смысл, если я рефакторингами получу то же самое или даже лучше. На днях появилась у меня версия: мода на баззворды пошла от убогого американского образования. Их учат не систематическому взгляду на мир, а разрозненным howto. Поэтому каждый чих должен иметь своё название.
Re[11]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 21:59
Оценка:
Здравствуйте, andyag, Вы писали:

A>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, andyag, Вы писали:


A>>>Благодаря тому, что в последние несколько лет в C# регулярно появляется всё больше не-чисто-ООПшных штук, вполне ожидаемо, что в C# комьюнити появляются люди, которые пытаются всё тянуть под эти самые не-ООПшные штуки. Но за этим ничего нет — просто обязательно кто-то будет пытаться убедить оппонента, что в C# можно делать всё по-другому. Можно. А зачем?


G>>1) меньше кода

G>>2) больший контроль со стороны компилятора
G>>3) меньше связность
G>>4) Чистые функции (меньше ошибок)

A>Это ваша субъективная любовь к ФП или есть какие-то исследования, где 2 группы обезьян пишут на ФП и ООП?


А при ем тут любовь? Вполне объективные факторы:
1) используем лямбды — не пишем вручную замыкания в командах (передачу параметров), не пишем сами классы команд — кода меньше, котроля со стороны компилятора больше.
2) Используем чистые фукнции (комбинаторы) — опять таки меньше кода, меньше связность (чистая функция зависит от параметров).
3) Не используем функциональную композицию — снижаем связность между классами и связность по состоянию.
4) про async\await вообще молчу, аснихронных код без async\await и честных замыканий написать нереально сложно.
И дело не только в ФП. Micosoft добивается высокой продуктивности разработчиков на C#, внедряя в язык эти самые паттерны. Просто многие фишки берут из ФЯ, ибо там многие паттерны уже 20-30 лет как реализованы.


A>>>В мире Java есть Groovy — тоже можно не писать классы. К чему это?

G>>Ты не понял? groovy это другой язык, а scriptcs это тот же самый C#, в котором нет необходимости писать классы.
A>До тех пор пока оно не компилируется csc, это не C#. Если вы закрываете на это глаза, Groovy ничем не отличается от Java кроме необязательности классов.
Оно компилируется Roslyn, который и есть компилятор C#, сделанный взамен древнего csc.

A>>>Такая точка появляется при любой попытке заинтегрировать свой LINQ-only код с 99% фреймворков — начиная с MSTest/NUnit, где надо писать классы и вешать на них аттрибуты, и заканчивая ASP.NET WebAPI, где вообще от ApiController наследоваться нужно.

G>>Открою тайну, в ASP.NET 5 уж не нужно ни от чего наследоваться. там все на conventions сделано. Да и раньше достаточно было реализовать IController только. ControllerBase нужен только для того, чтобы методы вызывать без префикса-имени класса. А, как уже писал выше в C# новой версии это не нужно, поэтому и потребность в базовом классе отпала, а да и в каком либо интерфейсе.

A>Не расслышал — вы говорите, всё ещё надо классы писать или мне показалось?

Только как средство группирования методов. Другого пока не придумали в C#. Важно что не используется наследование, полиморфизм и композиция объектов. Даже identity таким объектам не нужен.
Re[13]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 22:08
Оценка:
Здравствуйте, dimgel, Вы писали:

D>Здравствуйте, gandjustas, Вы писали:


G>>Какие использовались соглашения:

G>>1) Имя класса контроллера заканчивается на Controller
G>>2) Action возвращает ActionResult (хотя может возвращать что угодно, главное не void)
G>>Что из них проверяется компилятором? Внезапно ничего.

D>Если так, то может быть. Но у меня кроме Index() обычно ещё куча всяких вспомогательных методов в контроллере (проверка прав, например; а в случае REST-двигла там вообще развесистый template method), и наследование начинает рулить со страшной силой: code completion, защита от опечаток и т.п.

Для этого фильтры есть, зачем тебе наследование? Или this.UpdateModel(model,form) лучше, чем ModelBinder.UpdateModel(model,form)? Особенно в случае, когда ни this., ни ModelBinder. можно не писать.

D>В этой связи я когда-то высказывался (в теме, называвшейся что-то типа "что вам не нравится в языках, на которых вы пишете") про жаву, что ейные фреймворки целиком на POJO+аннотациях вместо наследования — уничтожают саму идею статики.

Надо по ситуации смотреть, не всегда есть смысл в наследовании от базовых классов. Например в asp.net 5 его нет.
Re[4]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: dimgel Россия https://github.com/dimgel
Дата: 25.12.14 22:10
Оценка: +1 :)
Здравствуйте, Sinix, Вы писали:

S>Для явы — . Она по-моему безнадёжно пропитана паттернами.


В силу своей убогости. Тут даже уместно будет [в целом спорное] утверждение, что паттерн — это поименованный и узаконенный костыль. Отсутствие ФВП фиксим костылём под названием "стратегия". Отсутствие вложенных функций — объектной декомпозицией и приватными методами. Мне тут один джавер на днях выкатил претензию — мол в моей реализации тестового задания слишком глубокая вложенность. МакКоннелом тряс. Ага, давайте лучше контракт класса засрём, даже если и приватными методами — размазанную на сотню маленьких методов логику ему видимо проще читать, чем в одном месте. А на МакКоннела нехай молодняк маструбирует, находящийся на стадии "никогда не делайте то-то"
Автор: Sinclair
Дата: 19.01.06
, у меня уже возраст не тот, сексуальность пониженная.
Отредактировано 25.12.2014 22:23 dimgel . Предыдущая версия .
Re[13]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: Sinix  
Дата: 25.12.14 22:15
Оценка:
Здравствуйте, dimgel, Вы писали:

D>Если так, то может быть. Но у меня кроме Index() обычно ещё куча всяких вспомогательных методов

Так соглашения по именованию не отменяют наследования, можно писать и в старом стиле.

D>ейные фреймворки целиком на POJO+аннотациях вместо наследования — уничтожают саму идею статики.

Пока от статики "избавились" только там, где она и так особой роли не играла, это просто сахар для DI. Скорее наоборот, ошибок будет меньше: с рослином гораздо проще добавить проверки, которые нарушения соглашений будут ловить на лету, при написании кода.
Re[13]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 22:16
Оценка:
Здравствуйте, andyag, Вы писали:


A>>>Есть объектно-ориентированный дизайн, а есть средства для его реализации. Наличие классов/объектов на уровне языка совершенно не означает, что любая программа на этом языке будет ОО.

G>>Прекрасный вывод, но кажется полдня назад ты утверждал что
G>>

A>>>всё что вы перечислили нужно писать в каких-то методах, а методы — в каких-то классах. И где-то в этой точке одновременно появляются паттерны

A>Если есть какое-то противоречие, я его не вижу. Давайте по-другому попробую. Если язык говорит, что через конструкцию "class XXX { ... }" можно описывать ООПшные классы, это:
A>1. во-первых не означает, что ООПшные классы нужно описывать именно этой конструкцией
A>2. во-вторых не означает, что этой конструкцией можно описывать только ООПшные классы
Логическую нестыковку выделил. В процитированном фрагменте был смысл что нужно писать классы и они являются априори ООП (что на самом деле не так).
Какое будет финальное мнение?


A>Т.е. если кто-то пишет на Haskell, в котором не классов, и у него нет проблем, всем нужно всё бросить и переходить на Haskell?

Нет, это ишь говорит, что в аскеле достаточно средств, чтобы писать код и не использовать ООП.

A>Есть ещё другие люди — они пишут на C#, в котором есть классы, и у них тоже нет проблем. Всем нужно всё бросить и переходить на C#?

Это еще не значит, что используют ООП.

A>Абсолютно пофигу, если кто-то счастлив работать с инструментами, которые сильно отличаются от моих или ваших. У людей разная мотивация: кто-то "работает программистом", кто-то любит "программирование", а кто-то любит "делать всякие штуки". Первому, очевидно, вообще всё пофигу — лишь бы не уволили. Второй наизусть помнит все задачки из SICP. Третий с большей радостью сделает какой-то новый недопродукт и заставит людей на него смотреть, чем будет вспоминать что делает этот кусок на Scheme, который ещё 10 минут назад казался абсолютно понятным.

К чему эта фраза? Увести разговор от обсуждения пользы паттернов и ООП в современных языках?

G>>ЗЫ. Кстати в книге pragmatic programmer, о которой я выше писал, рекомендуется изучать по одному языку в год.

A>Это одна из моих всею душою любимых книг.
и тем не менее

A>изучением миллионов языков я уже переболел

Re[14]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: dimgel Россия https://github.com/dimgel
Дата: 25.12.14 22:18
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Для этого фильтры есть, зачем тебе наследование? Или this.UpdateModel(model,form) лучше, чем ModelBinder.UpdateModel(model,form)? Особенно в случае, когда ни this., ни ModelBinder. можно не писать.


ХЗ что такое фильтры, но подозреваю, это что-то C#-specific, а у меня скала. В шарпе есть какая-то мулька, аналогичная скаловским implicits, но я всё время забываю, как она называется (ты её уже упоминал в этой ветке). Но implicits я не люблю: нагрузка на компилятор и запутывание кода. Хотя для пущей красивости DSL-ей иногда приходится.
Re[14]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: dimgel Россия https://github.com/dimgel
Дата: 25.12.14 22:26
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Для этого фильтры есть, зачем тебе наследование?


Кроме того, наследование (особенно template method, конкретно мною сделанный и полностью меня устраивающий) помогает структурировать мозги и код. А ещё по нему проще понять, что ожидается от реализации, чем от расположенных хрен знает где (и скорее всего даже не в одном месте, если среди них есть и библиотечные, и app-specific) третьих методов, пользы от которых для читаемости и обучения ничуть не больше, чем от жавовских аннотаций.

UPD. Т.е. слабая связность имеет и свои обратные стороны (которые, кстати, тут неоднократно упоминались в контексте DI-фреймворков): когда код вообще ни хрена не связан, концы вообще хрен найдёшь.
Отредактировано 25.12.2014 22:31 dimgel . Предыдущая версия . Еще …
Отредактировано 25.12.2014 22:28 dimgel . Предыдущая версия .
Re[15]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 22:29
Оценка:
Здравствуйте, dimgel, Вы писали:

D>Здравствуйте, gandjustas, Вы писали:


G>>Для этого фильтры есть, зачем тебе наследование? Или this.UpdateModel(model,form) лучше, чем ModelBinder.UpdateModel(model,form)? Особенно в случае, когда ни this., ни ModelBinder. можно не писать.


D>ХЗ что такое фильтры, но подозреваю, это что-то C#-specific, а у меня скала.

Ничего там C#-specific нет, просто набор объектов-обработчиков (паттерн chain of responsibility). При желании можно навешивать в виде атрибутов на классы\методы (для большей гранулярности)

D>В шарпе есть какая-то мулька, аналогичная скаловским implicits, но я всё время забываю, как она называется (ты её уже упоминал в этой ветке).

Extension methods называется.

D>Но implicits я не люблю: нагрузка на компилятор и запутывание кода. Хотя для пущей красивости DSL-ей иногда приходится.

По этому поводу есть рекомендации в FDG для C#.
Re[16]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: dimgel Россия https://github.com/dimgel
Дата: 25.12.14 22:33
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Extension methods называется.


Угу, они самые.

G>По этому поводу есть рекомендации в FDG для C#.


Англичанин русскому: с моста прыгать нельзя!
Русский: да плевал я на ваши запреты!




UPD. Я имею в виду, что нету у меня желания забивать голову чтивом в таком объёме, который ты осилил за сравнительно короткий срок, превратившись в тутошнего гуру (ну или активно претендуя на ). Я всю жизнь на позициях простого девелопера, вечное пиши-код-[beep].рф (сайтец кстати давно заблокировали), и привык проверять всё своим собственным лбом. Долго, но интересно. И очень надёжно.
Отредактировано 25.12.2014 22:48 dimgel . Предыдущая версия . Еще …
Отредактировано 25.12.2014 22:42 dimgel . Предыдущая версия .
Re[15]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: dimgel Россия https://github.com/dimgel
Дата: 25.12.14 22:51
Оценка:
D>Здравствуйте, gandjustas, Вы писали:

G>>Для этого фильтры есть, зачем тебе наследование?


Короче говоря, зачем мне фильтры, если есть наследование. У меня вообще складывается ощущение, что тут многие ненавидят ООП просто за то, что вот они его любили, а оно их разочаровало: оказалось не серебрянной пулей, а просто одним из паттернов. И они теперь принципиально не юзают его вообще нигде, даже там, где оно вполне нормально ложится.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.