Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: andyag  
Дата: 24.12.14 20:29
Оценка:
После долгих лет изучения ООП/ООД возникло-таки желание почитать о нём какую-то книжку Очень хочется, чтобы там было:

1. Откуда взялось слово "factory" и что ещё бывает оттуда же. Интересно, что у GoF есть только Abstract Factory, а просто Factory нету. Откуда оно взялось?
2. Откуда взялось слово "service" и что ещё бывает оттуда же. Предположу, что где-то там же должны быть описаны термины rich domain model и anemic domain model.
3. Рассказ про MVC с попытками однозначно его интерпретировать.
4. Рассказ про SOLID, GRASP и что ещё бывает такого.

Посоветуйте пожалуйста.
Re: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.12.14 22:20
Оценка: 72 (3)
Здравствуйте, andyag, Вы писали:

A>После долгих лет изучения ООП/ООД возникло-таки желание почитать о нём какую-то книжку Очень хочется, чтобы там было:


A>1. Откуда взялось слово "factory" и что ещё бывает оттуда же. Интересно, что у GoF есть только Abstract Factory, а просто Factory нету. Откуда оно взялось?

A>2. Откуда взялось слово "service" и что ещё бывает оттуда же. Предположу, что где-то там же должны быть описаны термины rich domain model и anemic domain model.
A>3. Рассказ про MVC с попытками однозначно его интерпретировать.
A>4. Рассказ про SOLID, GRASP и что ещё бывает такого.

A>Посоветуйте пожалуйста.


SOLID — Роберт Мартин http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf

Factory — это обобщение Factory Method\Abstract Factory из GOF, особую популярность паттерн получил в среде Java, где фабрику обозначали посфиксом в названии, чтобы не писать лишних слов. Если постфикс в названии класса, то это abstract factory, а если в названии метода, то factory method.

Service — это от SOA. Историю можно тут почитать — http://www.eriktownsend.com/doc_download/12-1-the-25-year-history-of-service-oriented-architecture.html. Получился настолько универсальный термин, что утянули везде.

GRASP — Ларман http://authors.phptr.com/larman/uml_ooad/index.html

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


Вообще все что можно почитать по теме можно найти в википедии — http://en.wikipedia.org/wiki/Software_design_pattern#Further_reading и http://en.wikipedia.org/wiki/Software_design_pattern#References
Re: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: romangr Россия  
Дата: 25.12.14 07:27
Оценка: +2 -1
Здравствуйте, andyag, Вы писали:

A>После долгих лет изучения ООП/ООД возникло-таки желание почитать о нём какую-то книжку Очень хочется, чтобы там было:


Я не понимаю вообще. Зачем знать баззворды? Лучше какие-то более фундаментальные вещи. ИМХО.
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 67>>
Re[2]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: LaptevVV Россия  
Дата: 25.12.14 07:51
Оценка:
То есть это все говорит, что нужно писать единую книжку.

Кто б из наших гуру занялся бы, а?
А я б редактировал.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: andyag  
Дата: 25.12.14 08:13
Оценка:
Здравствуйте, romangr, Вы писали:

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


A>>После долгих лет изучения ООП/ООД возникло-таки желание почитать о нём какую-то книжку Очень хочется, чтобы там было:


R>Я не понимаю вообще. Зачем знать баззворды? Лучше какие-то более фундаментальные вещи. ИМХО.


Фундаментальные вещи — это что например?
Re[3]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: Sinix  
Дата: 25.12.14 08:20
Оценка: +1
Здравствуйте, andyag, Вы писали:

A>Фундаментальные вещи — это что например?


Для явы — . Она по-моему безнадёжно пропитана паттернами.
Для дотнета самый лучший использовать паттерны — не вспоминать про них вовсе. Гораздо полезней изучить Рихтера и Framework Design Guidelines. Ну и не забывать про здравый смысл и знание матчасти, но это уже общий рецепт.

Обсуждалось кучу раз, например здесь
Автор: -rsdn-
Дата: 24.03.14
.
Re[3]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 11:40
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>То есть это все говорит, что нужно писать единую книжку.


LVV>Кто б из наших гуру занялся бы, а?

LVV>А я б редактировал.

Данунафиг, неблагодарное это занятие.
Re[4]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: LaptevVV Россия  
Дата: 25.12.14 11:47
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


LVV>>То есть это все говорит, что нужно писать единую книжку.


LVV>>Кто б из наших гуру занялся бы, а?

LVV>>А я б редактировал.

G>Данунафиг, неблагодарное это занятие.

Смотря что считать за пользу.
Писавшему — польза. Например, проясняются не совсем понятные моменты.
Опять же, если надо будет потом кому-то рассказывать, то формулировки уже будут отточены.
Денег — да, мало.
Но зато известность и репутация — а это часто стОит больших денег...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 12:16
Оценка:
Здравствуйте, andyag, Вы писали:

A>Фундаментальные вещи — это что например?


Фундаментальные вещи — это декомпозиция и композиция. То есть нужно уметь делить большую задачу на маленькие кусочки, которые максимально эффективно решаются средствами того языка и платформы, на которой ты работаешь, а потом собирать из этих кусочков готовое решение и встраивать его в приложение.

Например для ООП основа почти всех паттернов это выделение интерфейсов и рекурсивная композиция.
В ФЯ вариантов гораздо больше, там и ФВП, и монады, и комбинаторы, и пайплайн.
Re[4]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: andyag  
Дата: 25.12.14 13:52
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


A>>Фундаментальные вещи — это что например?


G>Фундаментальные вещи — это декомпозиция и композиция. То есть нужно уметь делить большую задачу на маленькие кусочки, которые максимально эффективно решаются средствами того языка и платформы, на которой ты работаешь, а потом собирать из этих кусочков готовое решение и встраивать его в приложение.


Так паттерны как раз и посвящены композиции и декомпозиции. Паттерны в первую очередь описывают ситуацию, где есть как минимум 2 участника, каждый со своими интересами, и нужно каким-то образом их подружить. На реализацию дружбы накладываются какие-то дополнительные ограничения, а исходя из этих ограничений предлагается _подход_ к реализации. В разных языках реализация может требовать больше или меньше кода, но с точки зрения подхода, с точки зрения выделенных компонентов и связей между ними всегда будет одно и то же. Если взять тот же Observer из GoF:
1. В Java нужно будет написать интерфейс IObserver, чтобы выделить компонент "Observer", а уведомляющему классу добавить методы типа subscribe/unsubscribe, чтобы выделить компонент "Subject".
2. В .NET всё то же самое — предлагается выделить Observer и Subject, но в языке есть средства, которые позволяют обойтись без введения штук типа IObserver, а просто взять и использовать готовый инструмент — делагаты/события.
В обоих случаях участники и связи между ними одни и те же, но технически решения отличаются: просто в Java единственный подходящий инструмент — это интерфейсы и классы, а в .NET есть более подходящий инструмент — events/delegates.

ИМХО, вся фишка паттернов в том, что программист может оперировать "стереотипными пачками объектов", а не отдельными объектами — никакой более высокой цели. У меня в принципе нет никакого желания спорить о нужности или ненужности всех этих знаний — просто хочется почитать нечто по сравнительно конкретным темам
Re[4]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: andyag  
Дата: 25.12.14 14:03
Оценка:
Здравствуйте, Sinix, Вы писали:

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


A>>Фундаментальные вещи — это что например?


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

S>Для дотнета самый лучший использовать паттерны — не вспоминать про них вовсе.

Есть какая-то принципиальная разница между Java и .NET, из-за которой подход к программированию принципиально отличается? Мне правда интересно.

S>Гораздо полезней изучить Рихтера и Framework Design Guidelines. Ну и не забывать про здравый смысл и знание матчасти, но это уже общий рецепт.


Тут возникло какое-то недопонимание. Я просил посоветовать литературу по вполне конкретным темам. Если FDG хоть в какой-то степени релевантен (уже читал), то Рихтер — это вообще не в ту степь (тоже читал). У меня нет задачи потратить время максимально эффективно: есть задача найти чего почитать перед сном.
Re[5]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 14:31
Оценка: +1
Здравствуйте, andyag, Вы писали:

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


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


A>>>Фундаментальные вещи — это что например?


G>>Фундаментальные вещи — это декомпозиция и композиция. То есть нужно уметь делить большую задачу на маленькие кусочки, которые максимально эффективно решаются средствами того языка и платформы, на которой ты работаешь, а потом собирать из этих кусочков готовое решение и встраивать его в приложение.


A>Так паттерны как раз и посвящены композиции и декомпозиции.Паттерны в первую очередь описывают ситуацию, где есть как минимум 2 участника, каждый со своими интересами, и нужно каким-то образом их подружить. На реализацию дружбы накладываются какие-то дополнительные ограничения, а исходя из этих ограничений предлагается _подход_ к реализации. В разных языках реализация может требовать больше или меньше кода, но с точки зрения подхода, с точки зрения выделенных компонентов и связей между ними всегда будет одно и то же. Если взять тот же Observer из GoF:

A>1. В Java нужно будет написать интерфейс IObserver, чтобы выделить компонент "Observer", а уведомляющему классу добавить методы типа subscribe/unsubscribe, чтобы выделить компонент "Subject".
A>2. В .NET всё то же самое — предлагается выделить Observer и Subject, но в языке есть средства, которые позволяют обойтись без введения штук типа IObserver, а просто взять и использовать готовый инструмент — делагаты/события.
A>В обоих случаях участники и связи между ними одни и те же, но технически решения отличаются: просто в Java единственный подходящий инструмент — это интерфейсы и классы, а в .NET есть более подходящий инструмент — events/delegates.
1) паттерны посвящены решению конкретных проблем, а не фундаментальным вещам.
2) паттерн претендуют на незвисимость от языка и платформы
На практике же в современных языках уже есть средства решения многих проблем, зачастую гораздо более элегантные, чем предлагается в GOF. Например визитор на динамиках в C#, лямбды с замыканиями вместо команд или паттерн-матчинг в ФЯ.
Поэтому первично — понимание возможностей языка и среды где ты создаешь решение, а паттерны вторичны (если вообще в них есть какой-либо смысл).

A>ИМХО, вся фишка паттернов в том, что программист может оперировать "стереотипными пачками объектов", а не отдельными объектами — никакой более высокой цели. У меня в принципе нет никакого желания спорить о нужности или ненужности всех этих знаний — просто хочется почитать нечто по сравнительно конкретным темам

Очень сомнительная "фишка", так как подменяет цель средством. Вместо простого кода решающего проблему появляется куча паттернов, которые только усложняют решение.
Я очень рад, что никто не выпустил книжку "asyncronous computation patterns" во времена .NET 2.0 , иначе мы бы сейчас имели вторую волну буллшита.
Re[5]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 14:39
Оценка:
Здравствуйте, andyag, Вы писали:

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


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


A>>>Фундаментальные вещи — это что например?


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

S>>Для дотнета самый лучший использовать паттерны — не вспоминать про них вовсе.

A>Есть какая-то принципиальная разница между Java и .NET, из-за которой подход к программированию принципиально отличается? Мне правда интересно.


1) Linq
2) Лямбды с честными замыканиями и ФВП
3) Анонимные типы
4) async\await и TPL
5) Очень прагматичные фреймворки

A>Тут возникло какое-то недопонимание. Я просил посоветовать литературу по вполне конкретным темам. Если FDG хоть в какой-то степени релевантен (уже читал), то Рихтер — это вообще не в ту степь (тоже читал). У меня нет задачи потратить время максимально эффективно: есть задача найти чего почитать перед сном.

Почитай SICP, Proramming pearls, Pragmatic Programmer, Design of Design и 4 томика крута.
Re[6]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: andyag  
Дата: 25.12.14 16:44
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


A>>Есть какая-то принципиальная разница между Java и .NET, из-за которой подход к программированию принципиально отличается? Мне правда интересно.


G>1) Linq

G>2) Лямбды с честными замыканиями и ФВП
G>3) Анонимные типы
G>4) async\await и TPL

Эти штуки C#/.NET безусловно рвут Java в плане скорости разработки и защиты от ошибок, но всё что вы перечислили нужно писать в каких-то методах, а методы — в каких-то классах. И где-то в этой точке одновременно появляются паттерны и исчезает разница между .NET и Java. Не поймите меня неправильно: я последние несколько лет пишу параллельно на C# и Java, отлично понимаю разницу между одной выразительной строчкой на LINQ и сотней плохочитаемых строчек в JPA, отлично знаю какой это геморрой делать UI без async/await. Но это всё просто инструменты языка — где-то они заменяют нагромождение классов, где-то уменьшают это нагромождение, а где-то от них ни холодно, ни жарко.
ИМХО, вещи совершенно параллельные.
Re[6]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: andyag  
Дата: 25.12.14 17:06
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


A>>Так паттерны как раз и посвящены композиции и декомпозиции.Паттерны в первую очередь описывают ситуацию, где есть как минимум 2 участника, каждый со своими интересами, и нужно каким-то образом их подружить. На реализацию дружбы накладываются какие-то дополнительные ограничения, а исходя из этих ограничений предлагается _подход_ к реализации. В разных языках реализация может требовать больше или меньше кода, но с точки зрения подхода, с точки зрения выделенных компонентов и связей между ними всегда будет одно и то же. Если взять тот же Observer из GoF:

A>>1. В Java нужно будет написать интерфейс IObserver, чтобы выделить компонент "Observer", а уведомляющему классу добавить методы типа subscribe/unsubscribe, чтобы выделить компонент "Subject".
A>>2. В .NET всё то же самое — предлагается выделить Observer и Subject, но в языке есть средства, которые позволяют обойтись без введения штук типа IObserver, а просто взять и использовать готовый инструмент — делагаты/события.
A>>В обоих случаях участники и связи между ними одни и те же, но технически решения отличаются: просто в Java единственный подходящий инструмент — это интерфейсы и классы, а в .NET есть более подходящий инструмент — events/delegates.
G>1) паттерны посвящены решению конкретных проблем, а не фундаментальным вещам.

Тут всё просто: меня сегодня не интересуют фундаментальные вещи, поэтому я попросил посоветовать книжки с баззвордами

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


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

G>На практике же в современных языках уже есть средства решения многих проблем, зачастую гораздо более элегантные, чем предлагается в GOF. Например визитор на динамиках в C#, лямбды с замыканиями вместо команд или паттерн-матчинг в ФЯ.

G>Поэтому первично — понимание возможностей языка и среды где ты создаешь решение, а паттерны вторичны (если вообще в них есть какой-либо смысл).

Хорошо. Что-то в манере моего письма заставило вас думать, что мне пока рано читать про вторичное?

A>>ИМХО, вся фишка паттернов в том, что программист может оперировать "стереотипными пачками объектов", а не отдельными объектами — никакой более высокой цели. У меня в принципе нет никакого желания спорить о нужности или ненужности всех этих знаний — просто хочется почитать нечто по сравнительно конкретным темам

G>Очень сомнительная "фишка", так как подменяет цель средством. Вместо простого кода решающего проблему появляется куча паттернов, которые только усложняют решение.
G>Я очень рад, что никто не выпустил книжку "asyncronous computation patterns" во времена .NET 2.0 , иначе мы бы сейчас имели вторую волну буллшита.

Вы из темы в тему пишете хорошие правильные вещи и всё время одна и та же проблема: вы интерпретируете вопросы с точки зрения своего нынешнего уровня не пытаясь проследить историю развития. Если бы вы "ненавидели" паттерны до знакомства с книжкой GoF, это было бы джуниорство. А вот после неё — вполне по-сеньорски. В обоих случаях — ненависть к паттернам, но сильно разная. Давайте предположим, что моя мотивация сейчас — прочитать ещё пару (десятков) книжек по паттернам, чтобы в итоге точно так же их возненавидеть.
Re[5]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: Sinix  
Дата: 25.12.14 17:17
Оценка:
Здравствуйте, andyag, Вы писали:

A>Есть какая-то принципиальная разница между Java и .NET, из-за которой подход к программированию принципиально отличается? Мне правда интересно.


Ага. Фаулер не так популярен

Если серьёзно, то в дотнете куча вещей реализованы напрямую из коробки и поддерживаются языком. Плюс учтён опыт хождения по граблям явы, дельфей и бейсика. У явы такого подарка на было
В результате в дотнете нет особой необходимости переизобретать стандартные вещи на ровном месте, сравни например события шарпа и явы. Или linq (ответ по ссылке бесценен как mastercard )

И пожалуй главное: сам подход к дизайну api в дотнете гораздо прагматичнее, api за редкими исключениями здорово вылизано. По крайней мере кошмариков типа InstantiationAwareBeanPostProcessorAdapter я не встречал.

Чтобы не холиварить: по большому счёту вся разница сводится к спору о вкусе фломастеров, мои предпочтения явно смещены в сторону дотнета. Для полноты картины было бы классно услышать мнение с другой стороны.

S>>Гораздо полезней изучить Рихтера и Framework Design Guidelines. Ну и не забывать про здравый смысл и знание матчасти, но это уже общий рецепт.

A>Тут возникло какое-то недопонимание. Я просил посоветовать литературу по вполне конкретным темам.
А без Рихтера от FDG толку не будет, без хорошего знания матчасти большая часть рекомендаций так и останется непонятной. Поэтому обычно советую обе книги парой.
Re[7]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 17:26
Оценка:
Здравствуйте, andyag, Вы писали:

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


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


A>>>Есть какая-то принципиальная разница между Java и .NET, из-за которой подход к программированию принципиально отличается? Мне правда интересно.


G>>1) Linq

G>>2) Лямбды с честными замыканиями и ФВП
G>>3) Анонимные типы
G>>4) async\await и TPL

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

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

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

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

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

A>ИМХО, вещи совершенно параллельные.
Самое главное что эти методы позволяют по другому строить программы. Не как рекурсивную композицию объектов, а как композицию функций.
Re[7]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.12.14 17:34
Оценка: 32 (1) +2
Здравствуйте, andyag, Вы писали:

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


A>Тут всё просто: меня сегодня не интересуют фундаментальные вещи, поэтому я попросил посоветовать книжки с баззвордами

а зря

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


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

И неправильно написано. Речь идет о языках, умеющих только ООП. Почувствуй разницу.

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

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


G>>На практике же в современных языках уже есть средства решения многих проблем, зачастую гораздо более элегантные, чем предлагается в GOF. Например визитор на динамиках в C#, лямбды с замыканиями вместо команд или паттерн-матчинг в ФЯ.

G>>Поэтому первично — понимание возможностей языка и среды где ты создаешь решение, а паттерны вторичны (если вообще в них есть какой-либо смысл).

A>Хорошо. Что-то в манере моего письма заставило вас думать, что мне пока рано читать про вторичное?


Вот эта

ИМХО, вся фишка паттернов в том, что программист может оперировать "стереотипными пачками объектов"


A>>>ИМХО, вся фишка паттернов в том, что программист может оперировать "стереотипными пачками объектов", а не отдельными объектами — никакой более высокой цели. У меня в принципе нет никакого желания спорить о нужности или ненужности всех этих знаний — просто хочется почитать нечто по сравнительно конкретным темам

G>>Очень сомнительная "фишка", так как подменяет цель средством. Вместо простого кода решающего проблему появляется куча паттернов, которые только усложняют решение.
G>>Я очень рад, что никто не выпустил книжку "asyncronous computation patterns" во времена .NET 2.0 , иначе мы бы сейчас имели вторую волну буллшита.

A>Вы из темы в тему пишете хорошие правильные вещи и всё время одна и та же проблема: вы интерпретируете вопросы с точки зрения своего нынешнего уровня не пытаясь проследить историю развития. Если бы вы "ненавидели" паттерны до знакомства с книжкой GoF, это было бы джуниорство. А вот после неё — вполне по-сеньорски. В обоих случаях — ненависть к паттернам, но сильно разная. Давайте предположим, что моя мотивация сейчас — прочитать ещё пару (десятков) книжек по паттернам, чтобы в итоге точно так же их возненавидеть.


А зачем? Нужно просто их знать и не применять.
Классика же http://rsdn.ru/forum/info/FAQ.philosophy.kungfu

Когда изучишь 50 способов сделать тоже самое, то поймешь почему паттерны не нужно применять.
Re[8]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: andyag  
Дата: 25.12.14 17:53
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


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

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

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

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


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

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

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

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

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

A>>ИМХО, вещи совершенно параллельные.
G>Самое главное что эти методы позволяют по другому строить программы. Не как рекурсивную композицию объектов, а как композицию функций.

Не соглашусь. Эта ценность есть только у вас в голове.
Re[8]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
От: andyag  
Дата: 25.12.14 18:21
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


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


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

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

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

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

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

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

G>>>Поэтому первично — понимание возможностей языка и среды где ты создаешь решение, а паттерны вторичны (если вообще в них есть какой-либо смысл).

A>>Хорошо. Что-то в манере моего письма заставило вас думать, что мне пока рано читать про вторичное?
G>Вот эта
G>

G>ИМХО, вся фишка паттернов в том, что программист может оперировать "стереотипными пачками объектов"

Окей.

G>>>Очень сомнительная "фишка", так как подменяет цель средством. Вместо простого кода решающего проблему появляется куча паттернов, которые только усложняют решение.

G>>>Я очень рад, что никто не выпустил книжку "asyncronous computation patterns" во времена .NET 2.0 , иначе мы бы сейчас имели вторую волну буллшита.
A>>Вы из темы в тему пишете хорошие правильные вещи и всё время одна и та же проблема: вы интерпретируете вопросы с точки зрения своего нынешнего уровня не пытаясь проследить историю развития. Если бы вы "ненавидели" паттерны до знакомства с книжкой GoF, это было бы джуниорство. А вот после неё — вполне по-сеньорски. В обоих случаях — ненависть к паттернам, но сильно разная. Давайте предположим, что моя мотивация сейчас — прочитать ещё пару (десятков) книжек по паттернам, чтобы в итоге точно так же их возненавидеть.
G>А зачем? Нужно просто их знать и не применять.

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

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


Сомнительный подход. Не получится потом, что находишь себя 40-летним дядькой, который единственное что умеет — делать одну и ту же ненужную хрень 50 разными способами?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.