Информация об изменениях

Сообщение Re[9]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA от 25.12.2014 19:58

Изменено 25.12.2014 20:08 gandjustas

Здравствуйте, 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>Не соглашусь. Эта ценность есть только у вас в голове.
Re[9]: Паттерны/идиомы/стереотипы ООП/ООД кроме GoF и PoEAA
Здравствуйте, 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.