Mamut однажды (11 марта 2009 01:59) писал в rsdn.flame.comp:
> Нет, не понимаю. Тормоза конкретно в чем?
В пониженной производительности.
> ЗЫ. Прежде, чем ты опозоришься, отвечу сам. Есть классы задач, где производительность рулит. Типа числодробилки какие-нибудь. Или там кодеки. Если это ГУИ, то если время отклика > такого гуи будет меньше скорости реакции человека, то пофиг на чем оно будет написано. Хоть на VB.
Ты как всегда, "на высоте". Представляю себе ГУИ тогоже CS, написанное на VB...
Люди, вы постоянно забываете что на компе хоть у пользователя, хоть на серваке работает НЕ ТОЛЬКО ваша с таким трудом написанная программа.
Здравствуйте, Cyberax, Вы писали:
C>>>GUI типа WPF — это SWING. G>>И декларативный байндинг умеет? C>С нужными библиотеками. И даже в XML тоже умеет сериализовать.
Какое отношение к этому имеет XML сериализация?
Но в самом деле, интересно, какие факторы позволили записать SWING в аналог WPF?
C>>>Анонимные типы в Java есть уже лет 12, extension methods — кривы. G>>А толку от анонимных классов без вывода типов в языке? Разве что для делегатов\функторов. C>Ну примерно для этого и используется.
Еще интересно, что кривого в extension methods?
C>>>Тем не менее, под Java нашёлся LDAP, а под .NET — нет. И так много раз уже было. G>>Да уж, многих базовых фич в джаве нету и не будет в ближайшее время, зато можно понтоваться кучей библиотек. C>Это говорит о том, что эти "базовые фичи" не являются обязательным требованием.
Ну и к библиотекам тоже самое... вообще пугает меня это разнообразие библиотек в проектах, тонны всего стороннего..
Оно что, правда весьма безглючно, надежно и не требует грабель?
C>И они уже давно есть в других языках для JVM, например, в Scala.
"Тут опять разница между теорией и практикой проявляется"
Здравствуйте, Константин Б., Вы писали:
КБ>Здравствуйте, criosray, Вы писали:
КБ>>>Вы предлагаете работать с БД через интерфейс объекта? O_o А как же SRP, LSP и другие прекрасные абревиатуры? C>>Никто не предлагает работать с БД через интерфейс объекта. Почитайте про Repository патерн и про UnitOfWork патерн.
КБ>Почитал. Оба паттерна просто великолепно могут работать с кортежами.
КБ>>>Неправда. Ваш вариант — написать руками объекты и из них сгенерить CREATE TABLE. Мой — сразу написать CREATE TABLE. И там и там приходится писать руками.
C>>Перед тем, как что-то писать руками надо подумать головой. Преимущество Domain Driven Design в том, что оно позволяет сконцентрироваться непосредственно на решении бизнес задачи и домен это есть домен самой бизнес задачи. База с данными это всего-лишь бэкенд.
КБ>Нет не позволяет. Она предлагает выдумывать какие-то суррогатные сковзные сущности, вместо того чтобы обратить внимание на реальную модель данных и на реальные потоки данных.
Не будь так категоричен. Бывают самые разные случаи. Где-то надо просто тупо вытащить из б.д на форму, плюс CRUD-операции. В подобных случаях, в самом деле, смысла городить объектную модель нет. Однако, существуют следующие случаи, когда это может оказаться очень уместным.
1. Над объектами предметной области выполняются нетривиальные операции, требующие соответствующего уровня абстракции.
2. Нужно заперсистить уже готовое приложение с ОО-дизайном в б.д. — частый случай.
3. Нужно сделать сервисную морду для данных объектов.
Вот как раз тогда такие удобные и мощные ОРМ, как хибернейт становятся очень полезны.
Социализм — это власть трудящихся и централизованная плановая экономика.
Здравствуйте, Sheridan, Вы писали:
S>Люди, вы постоянно забываете что на компе хоть у пользователя, хоть на серваке работает НЕ ТОЛЬКО ваша с таким трудом написанная программа.
Чё, серьезно? А мы то дураки отлаживаемся, отключая всё лишнее
Здравствуйте, criosray, Вы писали:
C>>GUI типа WPF — это SWING. Анонимные типы в Java есть уже лет 12, extension methods — кривы. C>Это Вы только что SWING c WPF сравнили?..
Да. Идеология похожая, хотя SWING на более старых технологиях сделан.
C>Кстати, а что для свинга есть что-то похожее на MS Expression Blend? http://www.netbeans.org/features/javafx/
G>>>Причем все эти страшные слова используются во много раз чаще, чем встраиваемый LDAP. C>>Тем не менее, под Java нашёлся LDAP, а под .NET — нет. И так много раз уже было. C>Novell LDAP .NET?
Мне нужен _сервер_. Встраиваемый.
Здравствуйте, MxKazan, Вы писали:
C>>С нужными библиотеками. И даже в XML тоже умеет сериализовать. MK>Какое отношение к этому имеет XML сериализация?
XAML и всё такое...
MK>Но в самом деле, интересно, какие факторы позволили записать SWING в аналог WPF?
Явное разделение вида и модели, отход от оконной модели интерфейса. Точнее, тут уж скорее WPF будет аналогом SWING'а, если смотреть на приоритет.
Естественно, WPF получился ещё и более развитым.
C>>Ну примерно для этого и используется. MK>Еще интересно, что кривого в extension methods?
Нарушение инкапсюляции (я знаю, что они не нарушают права доступа) — все методы класса должны быть в нём.
G>>>Да уж, многих базовых фич в джаве нету и не будет в ближайшее время, зато можно понтоваться кучей библиотек. C>>Это говорит о том, что эти "базовые фичи" не являются обязательным требованием. MK>Ну и к библиотекам тоже самое... вообще пугает меня это разнообразие библиотек в проектах, тонны всего стороннего..
Более того, оно ещё умеет автоматически устанавливаться по зависимостям!
MK>Оно что, правда весьма безглючно, надежно и не требует грабель?
Основные проекты (Spring, Hibernate, Apache *, ...) — надёжны, мне баги в фреймворках проблем не создают вообще.
C>>И они уже давно есть в других языках для JVM, например, в Scala. MK>"Тут опять разница между теорией и практикой проявляется"
Да, до некоторой степени, к сожалению. Но Скала постепенно становится практикой — она начинает поддерживаться в IDEA ( http://plugins.intellij.net/preview/popup/?sid=1682&pid=1347 )
Опять же, реально уже вполне есть нормальные альтернативные языки для JVM, которые широко поддерживаются фреймворками. Тот же Groovy и BeanShell.
Здравствуйте, Cyberax, Вы писали:
C>>Кстати, а что для свинга есть что-то похожее на MS Expression Blend? C>http://www.netbeans.org/features/javafx/
Это не совсем то... или скорее совсем не то. http://www.microsoft.com/expression/products/Overview.aspx?key=blend
G>>>>Причем все эти страшные слова используются во много раз чаще, чем встраиваемый LDAP. C>>>Тем не менее, под Java нашёлся LDAP, а под .NET — нет. И так много раз уже было. C>>Novell LDAP .NET? C>Мне нужен _сервер_. Встраиваемый.
Хм, ну так это ведь как-раз из упомянутой Вами категории — специфичных крайне мало востребованных вещей.
Здравствуйте, criosray, Вы писали:
C>>Потому что в C# не умеют пользоваться Hibernate. C>Зачем же обощать...
Ну кто-то умеет, согласен. Но не в целом все.
C>>Вон, даже целый Entity Framework из-за этого начали писать, и забросили LINQ2SQL. C>Просто Майкрософт внезапно осознало, что пора бы сделать свои версии популярных OS библиотек.
Ну дык. "Но у неё был фатальный недостаток..."
G>>>Это вам так кажется потому что Linq полноценно не пользовали. C>>Я его использовал. Ещё раз повторяю — в Java для большинства случаев Hibernate вполне хватает. C>В .NET тоже. Только Linq это далеко не только язык запросов для O/RM...
Таки именно для этого — как lightweight ORM для мэппинга результатов запросов из РБД на туплы. Естественно, LINQ можно использовать и для других целей, но изначально они таки для доступа к БД делался.
Здравствуйте, Cyberax, Вы писали:
MK>>Но в самом деле, интересно, какие факторы позволили записать SWING в аналог WPF? C>Явное разделение вида и модели, отход от оконной модели интерфейса. Точнее, тут уж скорее WPF будет аналогом SWING'а, если смотреть на приоритет.
Ну. Ладно. Я надеялся увидеть больше конкретики, но т.к. Swing не знаю, спорить не буду.
C>>>Ну примерно для этого и используется. MK>>Еще интересно, что кривого в extension methods? C>Нарушение инкапсюляции (я знаю, что они не нарушают права доступа) — все методы класса должны быть в нём.
Extension methods используют публичный контракт класса, так что по факту никакого нарушения инкапсуляции нет.
G>>>>Да уж, многих базовых фич в джаве нету и не будет в ближайшее время, зато можно понтоваться кучей библиотек. C>>>Это говорит о том, что эти "базовые фичи" не являются обязательным требованием. MK>>Ну и к библиотекам тоже самое... вообще пугает меня это разнообразие библиотек в проектах, тонны всего стороннего.. C>Более того, оно ещё умеет автоматически устанавливаться по зависимостям!
Что устанавливаться, куда устанавливаться? Setup-проект в Студии тоже все сборочки упаковывает "по зависимостям".
MK>>Оно что, правда весьма безглючно, надежно и не требует грабель? C>Основные проекты (Spring, Hibernate, Apache *, ...) — надёжны, мне баги в фреймворках проблем не создают вообще.
Баги = фичи?
C>>>И они уже давно есть в других языках для JVM, например, в Scala. MK>>"Тут опять разница между теорией и практикой проявляется" C>Опять же, реально уже вполне есть нормальные альтернативные языки для JVM, которые широко поддерживаются фреймворками. Тот же Groovy и BeanShell.
Не, ну это уже двойные стандарты
Да, NetBeans это умеет, но не так гламурно.
C>>>Novell LDAP .NET? C>>Мне нужен _сервер_. Встраиваемый. C>Хм, ну так это ведь как-раз из упомянутой Вами категории — специфичных крайне мало востребованных вещей.
Так ещё бы. И вот на Java они есть, а на .NET — .нет
C>>>С нужными библиотеками. И даже в XML тоже умеет сериализовать. MK>>Какое отношение к этому имеет XML сериализация? :) C>XAML и всё такое...
:) Правильно ли я воспроизвёл твою мыслительную цепочку: «WPF как-то связан с XAML», «XAML как-то связан с XML», «XML связан в том числе и с сериализацией», «в Java есть возможности XML-сериализации», «Для Java есть GUI фреймворк Swing» ⇒ «GUI типа WPF — это SWING»?
MK>>Еще интересно, что кривого в extension methods? C>Нарушение инкапсюляции (я знаю, что они не нарушают права доступа) — все методы класса должны быть в нём.
Хорошо известные «плюсистам» Герб С. (в Майкрософте, кстати, работает) и Андрей А. в своей Красной Книжке пишут:
44. Предпочитайте функции, которые не являются ни членами, ни друзьями.
Функции, не являющиеся членами или друзьями классов, повышают степень инкапсуляции путём снижения зависимостей: тело такой функции не может зависеть от закрытых и защищённых членов класса. Они также разрушают монолитность класса, снижая связность...
Свободные функции в C++ и статические методы в C# (а таковыми, по сути, и являются extension methods) хоть и не одно и то же, но для последних приведённая цитата остаётся в силе. Extension methods, помимо прочего, являются поддерживаемыми языком constraint'ами. Они гарантируют, что метод зависит только от публичного интерфейса, и при изменении деталей реализации его поведение достоверно не изменится, коль скоро не изменится публичный API. Это и есть инкапсуляция, а не «все методы класса должны быть в нём».
Здравствуйте, Cyberax, Вы писали:
C>>>С нужными библиотеками. И даже в XML тоже умеет сериализовать. MK>>Какое отношение к этому имеет XML сериализация? C>XAML и всё такое...
Гы! Сериализация сериализации рознь. XML-сериализация в том же .NET существует с незапамятных времён. Однако к XAML'у это не имеет никакого отношения.
MK>>Но в самом деле, интересно, какие факторы позволили записать SWING в аналог WPF? C>Явное разделение вида и модели,
Понятно. WPF Вы видели только на фотографии... причём чёрно-белой Swing, впрочем, похоже тоже.
Модель всегда отделена от её визуального представления, как минимум на логическом уровне. На то она и модель собственно. И задача состоит не в отделении, бо оно аксиома, а в обеспечении мощных и в то же время выразительных, простых и удобных механизмов связи модели с её конкретной визуализацией. Их и предоставляет WPF — binding'и для dependency property. Подобных вещей в Swing'е просто не существует.
C>отход от оконной модели интерфейса.
М-м-м... А где это в Swing'е-то можно увидеть ???
MK>>Еще интересно, что кривого в extension methods? C>Нарушение инкапсюляции (я знаю, что они не нарушают права доступа) — все методы класса должны быть в нём.
Чушь. С инкапсуляцией здесь всё в порядке. Мы просто тип расширяем. Можете смотреть на этот момент как на облегчённую форму наследования, например.
Здравствуйте, Cyberax, Вы писали:
C>>>Ну примерно для этого и используется. MK>>Еще интересно, что кривого в extension methods? C>Нарушение инкапсюляции (я знаю, что они не нарушают права доступа) — все методы класса должны быть в нём.
Где нарушение инкапсуляции?
C>>>И они уже давно есть в других языках для JVM, например, в Scala. MK>>"Тут опять разница между теорией и практикой проявляется" C>Да, до некоторой степени, к сожалению. Но Скала постепенно становится практикой — она начинает поддерживаться в IDEA ( http://plugins.intellij.net/preview/popup/?sid=1682&pid=1347 )
У меня на этом форуме стойкое чувство дежавю. Когда начинают говорить про фичи ФП в джаве сразу начинают рекомендовать скалу.
Далеко не все могут изучить еще один язык, а те кто могут изучить не всегда смогут его использовать.
gandjustas однажды (11 марта 2009 10:18) писал в rsdn.flame.comp:
> У меня на этом форуме стойкое чувство дежавю. Когда начинают говорить про фичи ФП в джаве сразу начинают > рекомендовать скалу. Далеко не все могут изучить еще один язык, а те кто могут изучить не всегда смогут его использовать.
Ой, не говори. Стоит вспомнить про дотнет — так сразу столько диалектов всплывает....
Здравствуйте, Cyberax, Вы писали:
G>>>>Это вам так кажется потому что Linq полноценно не пользовали. C>>>Я его использовал. Ещё раз повторяю — в Java для большинства случаев Hibernate вполне хватает. C>>В .NET тоже. Только Linq это далеко не только язык запросов для O/RM... C>Таки именно для этого — как lightweight ORM для мэппинга результатов запросов из РБД на туплы. Естественно, LINQ можно использовать и для других целей, но изначально они таки для доступа к БД делался.
Фигню говорите. Linq изначально язык объектых запросов, Linq2SQL прикрутили к релизу .NET 3.5 именно как proof of concept, а потом забросили, потому что параллельно развивался EF.
EF кстати вполне может и без Linq работать.
Здравствуйте, Sheridan, Вы писали:
>> У меня на этом форуме стойкое чувство дежавю. Когда начинают говорить про фичи ФП в джаве сразу начинают >> рекомендовать скалу. Далеко не все могут изучить еще один язык, а те кто могут изучить не всегда смогут его использовать. S>Ой, не говори. Стоит вспомнить про дотнет — так сразу столько диалектов всплывает....
Стоит вспомнить про дотнет, как сразу оно..то есть ты...короче и так понятно что всплывает.
Здравствуйте, Sheridan, Вы писали:
S>Люди, вы постоянно забываете что на компе хоть у пользователя, хоть на серваке работает НЕ ТОЛЬКО ваша с таким трудом написанная программа.
Еще там работает шеридан... а шеридану надо много много много ресурсов, чтоб писать много много много чуши на КСВ.
S> > Нет, не понимаю. Тормоза конкретно в чем? S> В пониженной производительности.
В пониженной производительности чего?
S> > ЗЫ. Прежде, чем ты опозоришься, отвечу сам. Есть классы задач, где производительность рулит. Типа числодробилки какие-нибудь. Или там кодеки. Если это ГУИ, то если время отклика S> > такого гуи будет меньше скорости реакции человека, то пофиг на чем оно будет написано. Хоть на VB.
S> Ты как всегда, "на высоте". Представляю себе ГУИ тогоже CS, написанное на VB...
Это ты, как всегда пукаешь в лужу. CS — это, с одной стороны, как раз пример приложения, где производительность важна, и с другой — пример приложения, которое не является постоянно используемым. Кстати, в первом CS все диалоги в меню можно было вытягивать из ресурсов — они чуть ли не MFC-шными были. Потому что именно для GUI даже в играх нафиг не нужна запредельная производительность.
S> Люди, вы постоянно забываете что на компе хоть у пользователя, хоть на серваке работает НЕ ТОЛЬКО ваша с таким трудом написанная программа.