Здравствуйте, mrTwister, Вы писали:
MK>>>Путаешь domain-model и view-model. Я говорил о второй. C>>А я с Trellis'ом могу от второй вообще отказаться. T>Ну можно вообще от всего отказаться в обработчике нажатия кнопки лазить в базу данных. View-Model — это очень полезная штука без относительно твоего примера с перерисовкой view, которая позволяет сконцентрировать логику пользовательского интерфейса в одном месте в тестируемом виде.
В том-то и дело, что я могу с помощью реактивного программирования тривиально связывать бизнес-логику и интерфейс.
Кстати, для .NET подобное тоже появляться начинает — LINQ for events и всё такое...
Здравствуйте, Cyberax, Вы писали:
C>В том-то и дело, что я могу с помощью реактивного программирования тривиально связывать бизнес-логику и интерфейс.
Интерфейс сам посебе может иметь сложную интерфейсную логику, которая никак не относится к бизнес-логике и тут нет прямой связи бизнес-логики с интерфейсом. Вот именно такую интерфейсную логику и помещают во ViewModel.
Здравствуйте, mrTwister, Вы писали:
C>>В том-то и дело, что я могу с помощью реактивного программирования тривиально связывать бизнес-логику и интерфейс. T>Интерфейс сам посебе может иметь сложную интерфейсную логику, которая никак не относится к бизнес-логике и тут нет прямой связи бизнес-логики с интерфейсом. Вот именно такую интерфейсную логику и помещают во ViewModel.
Вот именно большую часть этой сложной логики и можно убрать с помощью реактивного программирования.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, mrTwister, Вы писали:
C>>>В том-то и дело, что я могу с помощью реактивного программирования тривиально связывать бизнес-логику и интерфейс. T>>Интерфейс сам посебе может иметь сложную интерфейсную логику, которая никак не относится к бизнес-логике и тут нет прямой связи бизнес-логики с интерфейсом. Вот именно такую интерфейсную логику и помещают во ViewModel. C>Вот именно большую часть этой сложной логики и можно убрать с помощью реактивного программирования.
Куда убрать? Вот простейший пример: при установки чекбокса надо дизейблить кнопку. Куда ты предлагаешь убрать эту логику и как её тестировать?
Здравствуйте, mrTwister, Вы писали:
T>>>Интерфейс сам посебе может иметь сложную интерфейсную логику, которая никак не относится к бизнес-логике и тут нет прямой связи бизнес-логики с интерфейсом. Вот именно такую интерфейсную логику и помещают во ViewModel. C>>Вот именно большую часть этой сложной логики и можно убрать с помощью реактивного программирования. T>Куда убрать? Вот простейший пример: при установки чекбокса надо дизейблить кнопку. Куда ты предлагаешь убрать эту логику и как её тестировать?
Привязываешь свойство "disabled" кнопки к свойству "!selected" у чекбокса. Какие проблемы-то?
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, mrTwister, Вы писали:
T>>>>Интерфейс сам посебе может иметь сложную интерфейсную логику, которая никак не относится к бизнес-логике и тут нет прямой связи бизнес-логики с интерфейсом. Вот именно такую интерфейсную логику и помещают во ViewModel. C>>>Вот именно большую часть этой сложной логики и можно убрать с помощью реактивного программирования. T>>Куда убрать? Вот простейший пример: при установки чекбокса надо дизейблить кнопку. Куда ты предлагаешь убрать эту логику и как её тестировать? C>Привязываешь свойство "disabled" кнопки к свойству "!selected" у чекбокса. Какие проблемы-то?
А кто сказал, что чекбокс — это единственная причина, по которой кнопка может быть задизейблена?
C>Тестировать как обычно — юнит-тестами.
RO>>>Всё правильно, только опечатка, вместо WPF должно было быть Qt.
VD>>Ага. Только жаль, что приложения на нем получаютя убогими. Но в этом, очевидно, виноваты кривые руки...
RO>Не жаль. Если разработчики настолько зациклены на майкрософтовских технологиях, которые работают только в одной ОС
Если эта ОСь занимает 90% десктоп-рынка, то как-то пофиг, не?
Здравствуйте, Alexander Polyakov, Вы писали:
C>>Не в дизайнере счастье. И не может быть оно в нем. AP>Как же так, пол года назад я же говорил вам тоже самое (в тредах 1
AP>Не в дизайнере счастье. И не может быть оно в нем. XAML сложноват все-таки для отображения в дизайнере.
Вырываем цитаты из контекста.Путаем дизайнер и дизайнера(человека, который проектирует стили интерфейса без биндингов и прочего). AP>Сейчас вы пишите: AP>
AP>Тут что-то сродни веб-сайтам.
AP>А я об этом вам писал еще полгода назад: AP>
AP>В ASP.NET дизайнер улучшают с каждой версией (и пишут об этом в рекламных проспектах), но его использование до сих пор выглядит просто смешным.
AP>http://rsdn.ru/forum/design/3543799.1.aspx
Ну писали и писали. ЧСВ зашкаливает?
AP>Что случилось, вы таки поработали с WPF?
Ну кагбэ уже года три как, есличо. AP>На будущее, если еще не хватает профессионального опыта (или просто мозгов), чтобы оценить новую технологию по архитектурным решениям, лежащим в ее основе, то не стоит повторять рекламных проспектов Майрософт-а. Тогда сначала поработайте с этой новинкой, прочувствуете на себе все прелести из рекламных проспектов, а потом уже пишите об этом в интернетах.
З.Ы. Товарищ, ваш переход на личности(уже не в первый раз) начинает немного раздражать. Я-таки склоняюсь к мысли, что вас не мешало бы забанить на месяцок, чтобы научились общаться. Есть у вас точка зрения — отстаивайте ее аргументированно, без опускания оппонентов до своего уровня. Хотя о чем то бишь я, тут же священные войны.В общем, такие представители интеллектуального большинства, как Вы, уважаемый, попадаются в последнее время все чаще и чаще...
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, mrTwister, Вы писали:
T>>>>Интерфейс сам посебе может иметь сложную интерфейсную логику, которая никак не относится к бизнес-логике и тут нет прямой связи бизнес-логики с интерфейсом. Вот именно такую интерфейсную логику и помещают во ViewModel. C>>>Вот именно большую часть этой сложной логики и можно убрать с помощью реактивного программирования. T>>Куда убрать? Вот простейший пример: при установки чекбокса надо дизейблить кнопку. Куда ты предлагаешь убрать эту логику и как её тестировать? C>Привязываешь свойство "disabled" кнопки к свойству "!selected" у чекбокса. Какие проблемы-то?
C>Тестировать как обычно — юнит-тестами.
Юнит тесты в подобной ситуации не очень помогут, к сожалению.Не видел я еще нормальных юнит тестов на UI(TestComplete в нос прошу не тыкать).
Однако то, что вынесено в модель, протестировать действительно можно. У меня в текущем проекте степень покрытия тестами WPF проектов > 50%.Фактически, неохвачена только часть, связанная с непосредственным отображением данных, т.е. XAML. Все остальное легко тестируется.
Здравствуйте, Codechanger, Вы писали:
C>>Привязываешь свойство "disabled" кнопки к свойству "!selected" у чекбокса. Какие проблемы-то? C>>Тестировать как обычно — юнит-тестами. C>Юнит тесты в подобной ситуации не очень помогут, к сожалению.Не видел я еще нормальных юнит тестов на UI(TestComplete в нос прошу не тыкать).
Кто не поможет?
Здравствуйте, mrTwister, Вы писали:
C>>Привязываешь свойство "disabled" кнопки к свойству "!selected" у чекбокса. Какие проблемы-то? T>А кто сказал, что чекбокс — это единственная причина, по которой кнопка может быть задизейблена?
Ну указываешь и другие причины. Какие проблемы-то?
C>>Тестировать как обычно — юнит-тестами. T>А пример можно?
См. в другом посте.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, LaPerouse, Вы писали:
C>>>Вот конкретно в SWING'е оно сделано через Ж. Бааальшую Ж. LP>>В Swing-е оно сделано универсально C>Универсально через Ж.
Есть другие предложения?
C>>>Скажем, как мне в таблице сделать удобное редактирование ячеек? LP>>Известно как — выбирая нужную реализацию редактора содержимого ячейки через TableCellEditor. C>Ага, и для активации редактора нужно на него щёлкнуть. При этом другой активный редактор выключается (т.е. редактор может быть только один). Попытки сделать редактор автоматически следующим за курсором приводят к жутким глюкам при клавиатурной навигации. И т.п.
Есть такое, но только концепция editor-ов тут не при чем.
C>И я уж не говорю, что те же таблицы в SWINGе сделаны криво. В JTable нет возможности сделать фиксированную колонку (заголовки рядов)! Или нельзя делать rowspan/colspan'ы.
Интересно. Я как раз искал таблицу с rowspan/colspan, нашел какую-то платную хрень, но она убога. Можно эту таблицу поместить в свинговый или awt-ный контейнер?
Swing имеет следующие преимущества:
1. Давно существует, хорошо известны недостатки, накоплен большой опыт использования.
2. Существует большое количество компонент. Например, есть ли в HTMLayout window docable manager? Для свингов существует более десяти. Большинство полная хрень, однако есть 4 шт. промышленного качества.
Социализм — это власть трудящихся и централизованная плановая экономика.
Здравствуйте, LaPerouse, Вы писали:
C>>>>Вот конкретно в SWING'е оно сделано через Ж. Бааальшую Ж. LP>>>В Swing-е оно сделано универсально C>>Универсально через Ж. LP>Есть другие предложения?
В качестве первого приближения — XAML. Байндинги там на твёрдую четвёрку сделаны.
C>>Ага, и для активации редактора нужно на него щёлкнуть. При этом другой активный редактор выключается (т.е. редактор может быть только один). Попытки сделать редактор автоматически следующим за курсором приводят к жутким глюкам при клавиатурной навигации. И т.п. LP>Есть такое, но только концепция editor-ов тут не при чем.
Ещё как причём...
C>>И я уж не говорю, что те же таблицы в SWINGе сделаны криво. В JTable нет возможности сделать фиксированную колонку (заголовки рядов)! Или нельзя делать rowspan/colspan'ы. LP>Интересно. Я как раз искал таблицу с rowspan/colspan, нашел какую-то платную хрень, но она убога. Можно эту таблицу поместить в свинговый или awt-ный контейнер?
HTMLayout встраивается в SWING, у нас для этого специальный слой написан.
LP>Swing имеет следующие преимущества: LP>1. Давно существует, хорошо известны недостатки, накоплен большой опыт использования.
Угу, и его резюме: не надо использовать SWING.
LP>2. Существует большое количество компонент. Например, есть ли в HTMLayout window docable manager? Для свингов существует более десяти. Большинство полная хрень, однако есть 4 шт. промышленного качества.
Да ну. Как раз коммерческих контролов для SWING'а — самый мизер, особенно по сравнению с WPF.
Особенно прикольно это, учитывая что в Windows отказываются от docking manager'ов в пользу ribbon-like систем
Здравствуйте, Roman Odaisky, Вы писали:
RO>FreeType кажется какой-то чуждой, хотя эти продукты на порядок лучше того, что используют в MS.
FreeType на малых разрешениях сливает TrueType, а в больших уже не принципиально.
RO>Насчет преимуществ: я, естественно, не использовал ни то, ни другое, но, насколько я знаю, WPF — единственная виндовая технология, которая правильно отрисовывает мой простенький типографический тест: http://qwertty.com/tmp/ScreenTypographyTest.html.
Правильно, от того текст в WPF плохочитабелен, ибо требовать "правильно отрисовывать" этот тест на <300 DPI — более чем глупо. На таких разрешениях нужна читабельность, а не точность позиционирования.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, MxKazan, Вы писали:
I>\A>>меня больше интересуют не глюки вроде "не удалось нарисовать хитровывернутый контрол", а "зависает ни с того ни с сего" MK>>У нас проект разрабатывается на WPF уже полтора года. За это время "шаловливые ручки" залезли во многие возможности WPF и чего чего, а зависаний не было ни разу. А вот если ты подразумеваешь тормоза, то WPF безусловно достаточно требовательна.
I>При всех своих тормозах она быстрее на порядок нежели GDI+ и винформс и более стабильна.
Где именно она быстрее? На отрисовке сложных сцен? Ну так и уточняй. А пока что обычные GUI-приложения (где обычно десяток-другой контролов) WinForms запускаются в 2-3 быстрее и окошки заметно быстрее открываются.
WPF в плане быстордействия обгоняет традиционный GDI пока только там, где много контролов и визуальных эффектов. Не уверен, что пора уже все обычные приложения украшать рюшечками эстетики ради, если за это мы поплатимся заметной разницей в скорости запуска приложения. Так что на сегодняшней реальности WPF — это вовсе не тул общего назначения.
Здравствуйте, Cyberax, Вы писали:
C>Я уже приводил примеры огромных контор, которые строят на HTMLayout свой бизнес. Что касается остального — работаю над этим.
HTMLayout хорош с несколько других точек зрения — это в первую очередь независимость от других очень больших программных пакетов, типа WPF/.Net или QT. В принципе, другого вменяемого по размерам бинарника GUI тулза просто нет на сегодня.
И зря ты пытаешься спорить с WPF на их поле, преимущество HTMLayout совершенно в другом — факт использования его в многих очень известных программах тому подтверждение. Точно так же как отсутствие факта использования WPF хоть в какой-нить более-менее известной программе, кроме беты MS VS 2010.
Здравствуйте, vdimas, Вы писали:
I>>При всех своих тормозах она быстрее на порядок нежели GDI+ и винформс и более стабильна.
V>Где именно она быстрее? На отрисовке сложных сцен? Ну так и уточняй. А пока что обычные GUI-приложения (где обычно десяток-другой контролов) WinForms запускаются в 2-3 быстрее и окошки заметно быстрее открываются.
При чем здесь сцены ? Читай свою же писанину
V>WPF в плане быстордействия обгоняет традиционный GDI пока только там, где много контролов и визуальных эффектов. Не уверен, что пора уже все обычные приложения украшать рюшечками эстетики ради, если за это мы поплатимся заметной разницей в скорости запуска приложения. Так что на сегодняшней реальности WPF — это вовсе не тул общего назначения.
Здравствуйте, vdimas, Вы писали:
V>И зря ты пытаешься спорить с WPF на их поле, преимущество HTMLayout совершенно в другом — факт использования его в многих очень известных программах тому подтверждение. Точно так же как отсутствие факта использования WPF хоть в какой-нить более-менее известной программе, кроме беты MS VS 2010.
AutoCAD использует WPF для интерфейса.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, LaPerouse, Вы писали:
C>>>>>Вот конкретно в SWING'е оно сделано через Ж. Бааальшую Ж. LP>>>>В Swing-е оно сделано универсально C>>>Универсально через Ж. LP>>Есть другие предложения? C>В качестве первого приближения — XAML. Байндинги там на твёрдую четвёрку сделаны.
А при чем здесь байндинги? Байндинг — это привязка данных к отображению, editors — это изменение данных. Байндинг для JTable делается через TableModel и никакого отношения к CellEditor-ам не имеет. Ты можешь сделать байнинги как в xaml или еще черт-знает где, но от editor-ов никуда не деться, если конечно тебе нужна нормальная таблица.
Вот пример. В моем приложении в таблице отображаются вектора токов, напряжений, мощностей и т. п, текстовые данные, комлексные числа и пр. Для редактирования векторов используется компонента VectorEditor. Для редактирования текстовых данных — JTextField. Для редактирования комплексных чисел — JPanel с двумя полями для ввода реальной и мнимой частей. Чем предлагаешь заменить это хозяйство?
C>>>Ага, и для активации редактора нужно на него щёлкнуть. При этом другой активный редактор выключается (т.е. редактор может быть только один). Попытки сделать редактор автоматически следующим за курсором приводят к жутким глюкам при клавиатурной навигации. И т.п. LP>>Есть такое, но только концепция editor-ов тут не при чем. C>Ещё как причём...
Да нет же. Editor — это лишь указание контроллеру таблицы, с помощью чего он должен менять данные определенного типа в таблице. А то, как он инициирует процесс редактирования — это реализация контроллера такая. Изменив ее, можно иметь хоть тысячу редакторов активных одновременно (если памяти хватит).
C>>>И я уж не говорю, что те же таблицы в SWINGе сделаны криво. В JTable нет возможности сделать фиксированную колонку (заголовки рядов)! Или нельзя делать rowspan/colspan'ы. LP>>Интересно. Я как раз искал таблицу с rowspan/colspan, нашел какую-то платную хрень, но она убога. Можно эту таблицу поместить в свинговый или awt-ный контейнер? C>HTMLayout встраивается в SWING, у нас для этого специальный слой написан.
Кстати, есть еще одна альтернатива свингу — RIA "apache pivot". На вид сыроват, но некоторые его хвалят.
LP>>Swing имеет следующие преимущества: LP>>1. Давно существует, хорошо известны недостатки, накоплен большой опыт использования. C>Угу, и его резюме: не надо использовать SWING.
Да я бы с удовольствием, да нет альтернативы. Ты сам это признал ниже
LP>>2. Существует большое количество компонент. Например, есть ли в HTMLayout window docable manager? Для свингов существует более десяти. Большинство полная хрень, однако есть 4 шт. промышленного качества. C>Да ну. Как раз коммерческих контролов для SWING'а — самый мизер, особенно по сравнению с WPF.
Коммерческие контролы мне нафиг не упали. Зато есть куча открытых контролов для любых нужд.
C>Особенно прикольно это, учитывая что в Windows отказываются от docking manager'ов в пользу ribbon-like систем
То есть нет и не надо А мне без этого никак.
Кстати, какое мне дело до того, кто и от чего отказывается в Windows? Я делаю кроссплатформенные приложения, но даже если бы писал под windows, в здравом уме не стал бы использовать ribbon.
Социализм — это власть трудящихся и централизованная плановая экономика.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, Ikemefula, Вы писали:
C>>>Вот конкретно в SWING'е оно сделано через Ж. Бааальшую Ж. C>>>Скажем, как мне в таблице сделать удобное редактирование ячеек? Никак, так как угрёбищная система с editor'ами никуда не годиться. Так же, нельзя нормально делать композитные контролы и т.п. I>>Ну что ты, swing это круто !!! C>Уже нет HTMLayout круче.
Может, для начала сделаешь docking manager для него?
<Шепотом, чтобы враги не услышали >: В WPF они есть.
Социализм — это власть трудящихся и централизованная плановая экономика.