powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Абстрагирование UI
54 сообщений из 54, показаны все 3 страниц
Абстрагирование UI
    #38428229
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи, взываю вашему кругозору! Есть ли фреймворки для построения интерфейсов, содержащие в себе:
- API - описательный слой (аннотации и интерфейсы) для определения представлений и виджетов
- Common классы - реализация классов-обработчиков аннотированных классов, евэнтов, команд и пр.
- Реализация - конкретный движок, который "рендерит" интерфейс в рамках какой-то одной технологии, SWING например.

С точки зрения использования хотелось бы иметь такой:
1. Создать класс представления
2. Заинжектить виджеты, сервисы и ... при помощи спец. аннотаций из API с указанием атрибутов каждого элемента (возможно создать некий XML с параметрами разметки и пр.)
3. Закодить события, листенеры и обработчики и отметить их аннотациями
4. Зарегистрировать этот класс представления в "Регистре"
5. Увидеть результат

Конечная цель: иметь классы представлений, абстрагированные от конкретной технологии
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38428248
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-Конечная цель: иметь классы представлений, абстрагированные от конкретной технологии
В Sun когда-то тоже такие мечтатели были. Они придумали JSF.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38428292
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz-=*ShamaN*=-Конечная цель: иметь классы представлений, абстрагированные от конкретной технологии
В Sun когда-то тоже такие мечтатели были. Они придумали JSF.

Спасибо. Но описания представлений и виджеты там вроде не универсальные, т.е. обработчики общие (Backing Beans), а представления нужно делать отдельно для каждого рендера... или я не прав?
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38428302
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-Но описания представлений и виджеты там вроде не универсальные
В общем случае универсальные. До появления всяких фейслетов.

-=*ShamaN*=-т.е. обработчики общие (Backing Beans), а представления нужно делать отдельно для каждого рендера... или я не прав?
Нет. Представление тоже общее делается JSF тэгами. А затем пишется своя реализация JSF, которая умеет эти тэги рендерить в нужный движок.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38428507
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, премного благодарен, я серьёзно рассмотрю JSF в качестве клиентского двигла. Получается, в данной трактовке, нужно будет JSF-представления рендерить в Vaadin...

Пока ждал ответа наковырял вот эти библиотеки:
- http://code.google.com/p/jo-client-platform
- http://www.sibvisions.com/en/jvxmdemo
Последний (судя по демкам) - это то что нужно, но необходимо исходник ковырнуть). И, кстати, рендер для Vaadin там уже есть :) http://sourceforge.net/projects/jvx/files/?source=navbar

Ок, буду ковыряться, но JSF пока №1, ибо стандарт, а не конторская поделка, спасибо ещё раз...
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38428512
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-Blazkowicz, премного благодарен, я серьёзно рассмотрю JSF в качестве клиентского двигла.
Facepalm. Зачем это всё? JSF еле выехал на web, а на GUI его вообще никто не поддерживает, кроме может быть ADF.
-=*ShamaN*=-Получается, в данной трактовке, нужно будет JSF-представления рендерить в Vaadin...

Каким боком тут Vaadin всплыл?
-=*ShamaN*=-Ок, буду ковыряться, но JSF пока №1, ибо стандарт, а не конторская поделка, спасибо ещё раз...
Ну, не взлетит ведь.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38428524
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Vaadin - целевой end-user фреймфорк
А вот нам, программистам, от него как то надо абстрагироваться, чтобы код представлений не был завязан на конкретную технологию...
Поэтому я на решение этой задачи смотрю примерно так: "Common independent UI XML" -> Vaadin App Implementation -> User Happy, чтобы можно было "Common independent UI XML" -> Swing App Implementation -> Second User Happy

Опыта у меня немного, как бы Вы это сделали?
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38428529
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-А вот нам, программистам, от него как то надо абстрагироваться, чтобы код представлений не был завязан на конкретную технологию...
Зачем?
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38428550
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мертворожденное решение - не тратьте время. Если даже базу так и не асбтрагировали нормально, то что говорить о UI.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38429251
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz-=*ShamaN*=-А вот нам, программистам, от него как то надо абстрагироваться, чтобы код представлений не был завязан на конкретную технологию...
Зачем?

Вот на эту тему готов в личке пообщаться, чтоб флуд не разводить...
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38429257
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38429688
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-Вот на эту тему готов в личке пообщаться, чтоб флуд не разводить...
упрямый))). Всё равно будет делать)
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38430715
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123-=*ShamaN*=-Вот на эту тему готов в личке пообщаться, чтоб флуд не разводить...
упрямый))). Всё равно будет делать)

Не, Петро, убиваться над технологией не буду... Но изолировать прикладной код буду по-любому))
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38430810
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-Конечная цель: иметь классы представлений, абстрагированные от конкретной технологии

http://code.google.com/p/swinghtmltemplate/
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38430839
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-Не, Петро, убиваться над технологией не буду... Но изолировать прикладной код буду по-любому))
в вебе это не просто. Все хотят изолировать, только никто не знает куда))). На клиента или на сервер.
"Убиваться не буду, но изолировать по любому (с)"
))
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38431427
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123-=*ShamaN*=-Не, Петро, убиваться над технологией не буду... Но изолировать прикладной код буду по-любому))
в вебе это не просто. Все хотят изолировать, только никто не знает куда))). На клиента или на сервер.
"Убиваться не буду, но изолировать по любому (с)"
))

В смысле "на клиента или на сервер"?
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38431432
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-В смысле "на клиента или на сервер"?
Web GUI бывают с реализацией логики на сервере (JSP) или на клиенте (GWT).
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38431589
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz-=*ShamaN*=-В смысле "на клиента или на сервер"?
Web GUI бывают с реализацией логики на сервере (JSP) или на клиенте (GWT).

Аааа... вот как.
Сейчас продумываю вариант, как реализовать UseCase, приведенный ниже... Кажется, в данном раскладе не важно, клиент или сервер; по крайней мере, искренне хочется в это верить))) но однозначно можно сказать, в JavaScript такое представление кода конвертировать будет очень проблематично, поэтому при "упаковке" кода в такой вид на клиенте должна быть Java, ну а дальше вопрос движка, умеющего "Съедать" такие конструкции.

Этот код - примерный набросок того, что мне хотелось бы иметь в качестве описателя логики.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
@Component(designSource="ClientLogicDesign.xml")
public class ClientLogic {
	
	private static final String ACTION_OK = "ACTION_OK";
	
	@EJB
	IEchoFacade echo;	
	
	@Bind("NameEditor")
	protected ITextEdit name;
	
	@Bind
	protected IApplication app;	
	
	// этот экшн привязан к кнопке в XML
	@Action(ACTION_OK)
	@RolesAllowed("AUTHENTICATED")
	public void doActionOK() { 
		String echoStr = echo.doEcho(name.getStringValue()); 
		app.showInfo(echoStr);
	}
	
	@ActionCheck(ACTION_OK)
	public boolean checkActionOK() {
		return (echo != null);
	}
	
}



Наверное, это больше на серверный вариант похоже...
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38432848
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-Кажется, в данном раскладе не важно, клиент или сервер; по крайней мере, искренне хочется в это верить)))

====== прикольно)). У MS с его сильверлайтом уже не получилось. Может у вас получится))

на клиенте должна быть Java,

==== это уже не веб проект(
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38433109
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123-=*ShamaN*=-Кажется, в данном раскладе не важно, клиент или сервер; по крайней мере, искренне хочется в это верить)))

====== прикольно)). У MS с его сильверлайтом уже не получилось. Может у вас получится))

на клиенте должна быть Java,

==== это уже не веб проект(



Petro123, а вот у них получилось:
http://www.sibvisions.com/en/jvxmdemo

Я не знаю, почему у MS не получилось)) У МС обычно вообще не получается)))

А по поводу "не вэб-проект", это да, совсем не вэб
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38433169
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-Petro123, а вот у них получилось:
http://www.sibvisions.com/en/jvxmdemo
что именно?
Это rich гуи?
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38433758
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Как я понял, принцип jvx состоит в том, что клиентский код пишется с использованием обобщенных компонентов и виджетов; таким образом, задача разработчика - задекларировать интерфйейс и поведение в педоставляемой библиотекой обобщенной нотации. А дальше дело рендеров, они эти дакларации воспроизводят.

Вы прикрепили карртинку swing-приложения, там еще есть отрендеренный интерфейс под чистый вэб (похоже на ExtJS), flex и тот же swing, завернутый в апплет. А в репозитории лежит порт рендерера для vaadina.

Возвращаясь к вопросу исполнения кода, на клиенте или на сервере, уместно отметить тип клиента - исполняемый он или терминальный.
В исполняемом виде трудно представить, как java код будет выполняться на клиенте без jvm, и как вы верно подметили, это уже не вэб. В терминальном исполнении на клиенте имеется только представление и реакция на действия пользоваля отрабатввается на сервере, в данном контексте клиентский код на серевере может вполне себе использовать все прелести jvm и здесь не требуется транслировпть наши формы тз java в javascript (aka gwt).

Я думаю, что тема в топике исчерпала себя и можно заканчивать дискуссию. Библиотеки я использовать не буду, ибо написать свой обработчик 'тонких' задекрированных программистом клиентских классов дело не сложное. Основная работа, организовать контракт взаимодействия системного кровня с прикладным. Всем спасибо))
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38433943
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-клиентский код пишется с использованием обобщенных компонентов и виджетов; таким образом, задача разработчика - задекларировать интерфйейс и поведение в педоставляемой библиотекой обобщенной нотации
я и спрашивал, как это выглядит КОНКРЕТНО в коде и в готовом виде.
Т.е. "по шагам".
Т.к. компонент "ВыборДаты" или "ТекстовоеПоле" знаю, а "обобщённый компонент" - не знаю.
Удачи!
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38436856
AlexJm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123-=*ShamaN*=-Petro123, а вот у них получилось:
http://www.sibvisions.com/en/jvxmdemo
что именно?
Это rich гуи?


Ну а почему нет?
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38437187
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexJmНу а почему нет?
дык по умолчанию, никто не верит, что это ноу-хау)) именно с тонким клиентом.
А по картинке - обычная веб страничка....без "пошаговых родов".
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38437876
AlexJm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123AlexJmНу а почему нет?
дык по умолчанию, никто не верит, что это ноу-хау)) именно с тонким клиентом.
А по картинке - обычная веб страничка....без "пошаговых родов".
Самое смешное - что этим (по первым впечатлениям-ковыряниям) действительно вполне можно пользоваться
в какой-там наколенной корпоративной ERP. Как замена Oracle Forms - вообще прекрасно.
Они б еще Binding Variables ввели - цены б не было. А так - надо DataAccess малость переделывать.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38438668
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexJmPetro123пропущено...

дык по умолчанию, никто не верит, что это ноу-хау)) именно с тонким клиентом.
А по картинке - обычная веб страничка....без "пошаговых родов".
Самое смешное - что этим (по первым впечатлениям-ковыряниям) действительно вполне можно пользоваться
в какой-там наколенной корпоративной ERP. Как замена Oracle Forms - вообще прекрасно.
Они б еще Binding Variables ввели - цены б не было. А так - надо DataAccess малость переделывать.

Да, похоже, что свой костыль для БД они впилили жёстко
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439197
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте сначала сделать классный интерфейс без абстракций. А потом если все еще будет желание, переработаете его в нужные абстракции.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439324
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateПопробуйте сначала сделать классный интерфейс без абстракций. А потом если все еще будет желание, переработаете его в нужные абстракции.

Как показывает практика, руки "потом" до абстракций или до чего-то подобного не доходят, ибо ведь и так работает ;))
Поэтому если делать - так сразу, пусть это время займет, зато потом профит будет без лишних телодвижений...
Оно ведь как обычно бывает - пользователи: "Во, классно сделали! Давайте ещё вот это... вот это и вот это срочно... " - и так далее; потом год за годом вспоминаешь об абстракциях только в курилке))) А кода в проекте становится все больше, и без абстракций... И в один прекрасный момент приходит точка, после которой об абстракциях вообще можно забыть, потому что перепилить существующую отлаженную базу кода = переписать все заново. Спасибо за совет.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439329
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ещё одна штуковина. Тот же JVx, для EE
http://sourceforge.net/projects/jvxee/
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439677
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело не в том что это займет лишнее время, а что даже без абстракций классный интерфейс встречается в одном случае из 10. В случае-же когда внимание отвлекается на что-то еще типа абстракций - нормальный интерфейс не получается почти никога. Поэтому лучше решать постепенно.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439688
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-Вот ещё одна штуковина. Тот же JVx, для EE
http://sourceforge.net/projects/jvxee/
"как показывает практика (аффтар)"
у тебя будет ещё одна 101 штуковина, которая никому не будет нужна.
Т.к. это ТЗ:
-=*ShamaN*=-Конечная цель: иметь классы представлений, абстрагированные от конкретной технологии
абстрактный сферический конь в вакууме. Даже на MVC не тянет.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439823
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 у тебя будет ещё одна 101 штуковина, которая никому не будет нужна.

Объективно, Вам, Petro, она точно не нужна)))


Petro123 ... Даже на MVC не тянет.

..и не должно
интерфейс тут rich, в вэбе или нет - неважно
И для rich stateful моделей больше подходит MVP, который в одном ряду с MVC стоит

Как трамплин для реализации подхода, JVx отличный кандидат
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439836
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-интерфейс тут rich, в вэбе или нет - неважно
Огласите весь список "неважно".
- HTML5 или неважно?
- без апплетов или чистый тонкий клиент или неважно?
- для мобилок или неважно?
- за 6 шагов пишется проект или за 55
- модель 1С, где свой класс программистов и ЯП или неважно.
Просто всё пока абстрактно и далеко от программиста.
IMHO
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439846
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateДело не в том что это займет лишнее время, а что даже без абстракций классный интерфейс встречается в одном случае из 10. В случае-же когда внимание отвлекается на что-то еще типа абстракций - нормальный интерфейс не получается почти никога. Поэтому лучше решать постепенно.

А что понимается под классным интерфейсом?

ИМХО, организационно на интерфейс отвлечься "потом" проще, чем на внутренние конструкции приложения. Интерфейс живёт отдельно от логики приложения, меньше рисков сломать что-то отлаженное. Пользователям/заказчикам эти изменения видны, эта работа очевидна. Если заниматься внутренними конструкциями и абстракциями позже, то у пользователей/заказчиков возникают вопросы типа "Вы изменили внутренний код приложения, а что для нас изменилось" и претензии "а стоило ли, если все и так хорошо работало, зачем вы тратите время? задача уже решена, нас все устраивает". У нас есть унаследованное приложение, ситуация ровно такая, как я описал в самом начале: лучше не трогать, чтобы штукатурка не посыпалась, хотя интерфейс меняется без проблем и под аплодисменты. Мое мнение конкретно по этому вопросу не изменится.

И, да, как подметил Petro, существует паттерн MVC, который изолирует интерфейс. Эта изоляция позволяет менять интерфейс без изменений в контроллерах и моделях. НО! Если не продумать заранее применение этого паттерна в проекте, но нарисовать классный интерфейс, то стоимость поддержки и изменений такого кода будет возрастать прогрессивно в зависимости от "размера" проекта, неважно, на уровне логики или интерфейса эти изменения вносятся.
Кстати, то что я имел ввиду под абстрагированием, покрыто паттерном Adapter.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439866
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-,
- в Delphi ГУИ мышкой кликается одно окно в день.
- в JS ГУИ верстается одно окно в день.
- в Java - GWT \ JSF ........
Если вы сделали Толстый клиент, то это ваша проблема.
Инструменты то есть.
Боязнь сломать только от незнания их.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439878
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123-=*ShamaN*=-интерфейс тут rich, в вэбе или нет - неважно
Огласите весь список "неважно".
1 - HTML5 или неважно?
2 - без апплетов или чистый тонкий клиент или неважно?
3 - для мобилок или неважно?
4 - за 6 шагов пишется проект или за 55
5 - модель 1С, где свой класс программистов и ЯП или неважно.
6 - Просто всё пока абстрактно и далеко от программиста.
IMHO

1) HTML5 или XUL или Swing или Flex или @Delphi! renderer@ - не важно
я, как прикладной программист, хочу только описывать: 1) декларативно - что должно быть в интерфейсе 2) программно - обработчики
далее я хочу деплоить свои артефакты в абстрактное "приложение" и чтобы они обрабатывались там, т.е., что бы я видел интерфейсы и реакцию

2) В данном подходе есть артефакт, называемый "приложение" - это конкретная реализация, и их может быть несколько (нами выбран Vaadin, как клиентская платформа). Для того чтобы мои декларативные описания работали, нужно написать конкретный движок на Ваадине, а точнее фабрику компонентов. Мои декларативные интерфейсы должны работать на ваадиновском виджетсете.
Ну, я завтра захочу Swing... Теперь пишем рендер декларативных интерфейсов в Swing, ведь они и там работать будут, верно?

3) Для мобилок это работать не будет, не стыкуются лэйауты. Хотя поведение менять не придётся.

4) Проект пишется за 55 шагов

5) Декларативная часть подразумевает описание на Java. Хотя приложение, которое рендерит интерфейсы и исполняет обработчики может быть написано и на С.

6) Petro, Вы, как всегда, правы... Реально, этот вопрос относится к компетенции архитекторов. В SCJP вроде бы даже есть отдельно сертификация такая...
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439888
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-Декларативная часть подразумевает описание на Java
конкретнее пример , и почему не на JS?
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439890
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я технических проблем реализации не вижу.
Паттерны: MVP + Adapter (для компонентов и приложения)
JVx ясно даёт показать, что это возможно... Одна и та же демка поставляется: - в Swing (как апплет и Standalone), Flex, GWTxxx, пилится фабрика для ваадин реализации...

Чего мы тут спорим, это реально... И, действительно, не важно, что там, HTML или ещё что-то... Да хоть QT/// был бы движок и хавал бы УНИВАРСАЛЬНУЮ АБСТРАКТНУЮ (чувствую, Petro зеленеет) декларацию...

Вопрос уже исчерпал себя... давайте завершать дискуссию, уже все понятно, во всяком разе, я разобрался в своём вопросе и уже даже XSD-схему успел нарисовать для описания представлений в XML, а тут все спор никак не утухнет не понятно из-за чего.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439905
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123-=*ShamaN*=-Декларативная часть подразумевает описание на Java
конкретнее пример , и почему не на JS?

Думали над этим (чтобы в БД типа сложить все можно было). Отказались из-за типизации (её отсутствия) и чтобы не плодить нотации. Хотя идея применения JS в данном случае имеет своё право на жизнь...
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439909
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-,

Я если честно не понимаю масштаба вашей проблемы, зачем вам эта абстракция так нужна?
Ну написали вы 250 компонентов, которые и под vaadin и под jsf и под Swing, а дальше то что? поддержка всего этого?
Вон у Vaadin часто меняются концепции, да и в JSF - Richfaces c IceFaces не дружат. В любом случае вы будете разгребать и строить костыли, так может и не стоит игра свеч?

Я уверен что проще разнести архитектуру грамотно, а не порождать лишние уровни абстракции.

А сама задача очень интересная желаю вам удачи, думаю вот так сразу вас эта идея не отпустит :)
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439911
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-Чего мы тут спорим, это реально
конечно всё можно написать.
И даже так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
object Form1: TForm1
  Left = 226
  Top = 114
  Width = 1142
  Height = 656
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
end


Только в посыле "не важно какая БД", есть столько же ньюансов, как и в после "неважно что рендер".
Удачи!
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439917
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GregTk Вон у Vaadin часто меняются концепции...

Вот от этих изменений я и хочу основную массу прикладного кода оградить...

PS// Сама эта идея возникла в процессе перевода с ваадина 6 на 7
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439920
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GregTk-=*ShamaN*=-, ... желаю вам удачи, думаю вот так сразу вас эта идея не отпустит :)

Спасибо)) точно, не отпустит, забористая зараза))
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439923
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-Вот от этих изменений я и хочу основную массу прикладного кода оградить...
с этим согласен.
Удручает, что при смене версии Любой библиотеки приходится рефакторить код.
Но, это наша работа)). Никак не "оградить" )))))
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439926
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123-=*ShamaN*=-Вот от этих изменений я и хочу основную массу прикладного кода оградить...
с этим согласен.
Удручает, что при смене версии Любой библиотеки приходится рефакторить код.
Но, это наша работа)). Никак не "оградить" )))))

Petro, на исходе своей кампании по захвату этой методики, могу поделиться впечатлениями и результатом, получилось или нет, если Вам интересно ;)
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439963
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-,
угу.
Вы будете первый, кто разделил 3 богатыря в Java
ГУИ <--> прикладной код <--> БЛ с событиями.
))
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38439991
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123-=*ShamaN*=-,
угу.
Вы будете первый, кто разделил 3 богатыря в Java
ГУИ <--> прикладной код <--> БЛ с событиями.
))

ОК
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38440365
AlexJm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123-=*ShamaN*=-Чего мы тут спорим, это реально
конечно всё можно написать.
И даже так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
object Form1: TForm1
  Left = 226
  Top = 114
  Width = 1142
  Height = 656
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
end


Только в посыле "не важно какая БД", есть столько же ньюансов, как и в после "неважно что рендер".
Удачи!
Вот меня, скажем JVx тоже "зацепил". Но не концепцией "любая БД" или "любой клиент", а тем, что я пока вижу единственную вменяемую (даже Qt нервно курит в сторонке) организацию DataBinding. Т.е. это им почти удалось - TDataSet, но в Java. И что еще немаловажно (в последнее время для это очень актуально) - проект развивается.
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38500180
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот набросок того, что получается, "as is" (попрошу без критики - это пока всего лишь рабочий черновик)
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38500183
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это то, как выглядит внешне
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38500191
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это "прикладной" код ( работа с контейнером данных не вынесена в API, поэтому пришлось "разврапить" таблицу и написать то, чего тут быть не должно )

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
package test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import com.vaadin.ui.AbstractSelect.ItemCaptionMode;
import com.vaadin.ui.Table;
import com.vaadin.ui.Table.Align;
import com.vaadin.ui.Table.ColumnHeaderMode;

import cs.core.client.api.annotations.Bind;
import cs.core.client.api.annotations.Cleanup;
import cs.core.client.api.annotations.Init;
import cs.core.client.api.annotations.Invoker;
import cs.core.client.api.annotations.Service;
import cs.core.client.api.common.CSIcon;
import cs.core.client.api.component.ComponentContext;
import cs.core.client.api.composition.base.CSElement;
import cs.core.client.api.composition.widgets.CSButton;
import cs.core.client.api.composition.widgets.CSLayout;
import cs.core.client.api.composition.widgets.CSTable;
import cs.core.client.api.services.Application;
import cs.core.client.api.services.ApplicationFactory;
import cs.core.client.api.services.Facade;
import cs.core.client.impl.data.model.BeanPropertyModel;
import cs.core.client.vaadin.composition.widgets.VTable;
import cs.core.client.vaadin.data.BeanViewContainer;
import cs.customsPrototype.CustomReportsFacade;
import cs.customsPrototype.Edorepin;
import cs.customsPrototype.query.EdorepinSearchQuery;

public class TestComponent implements Serializable {

	private static final long serialVersionUID = 1L;

	@Bind
	private ComponentContext ctx;

	@Bind("content")
	private CSLayout content;

	@Bind("toolbarButton1")
	private CSButton toolbarButton1;

	@Bind("toolbarButton2")
	private CSButton toolbarButton2;

	@Bind("toolbarButton3")
	private CSButton toolbarButton3;

	@Bind("toolbarButton4")
	private CSButton toolbarButton4;

	@Service(ApplicationFactory.class)
	private ApplicationFactory factory;

	@Service(Application.class)
	private Application app;

	@Service(Facade.class)
	private Facade facade;

	@Bind("tab")
	private CSTable table;

	private Table vt;

	private BeanViewContainer<Long, Edorepin> cont;

	private EdorepinSearchQuery query;

	private void initColumn(Table table, BeanPropertyModel model) {
		String pid = model.getId();
		vt.setColumnHeader(pid, model.getCaption() == "" ? model.getId() : model.getCaption());
		vt.setColumnCollapsible(pid, true);
		vt.setColumnCollapsed(pid, !model.isVisible() );
		vt.setColumnAlignment(pid, Align.LEFT);
	}

	@Init
	public void init() throws Exception {

		vt = ((VTable) table).getInternalObject();

		cont = new BeanViewContainer<Long, Edorepin>(Edorepin.class);
		CustomReportsFacade f = facade.getInterface(CustomReportsFacade.class);
		query = f.createQuery(CustomReportsFacade.QUERY_SEARCH);

		vt.setContainerDataSource(cont);
		vt.setColumnHeaderMode(ColumnHeaderMode.EXPLICIT);
		vt.setVisibleColumns(cont.getModel().getAccessiblePropertyNames());
		for (BeanPropertyModel pmod : cont.getModel().getAccessiblePropertyModel() ) {
			initColumn(vt, pmod);
		}
		vt.setItemCaptionMode(ItemCaptionMode.PROPERTY);
		vt.setItemCaptionPropertyId( "fam" );


		if (cont.getItemsCount() > 0)
			vt.setValue(cont.firstItemId());


		toolbarButton1.setIcon(factory.createIcon(CSIcon.Library.ICON_OPEN));
		toolbarButton1.setIconOnly(true);
		toolbarButton1.setDescription(toolbarButton1.getCaption());
		// toolbarButton1.setEnabled(false);

		toolbarButton2.setIcon(factory.createIcon(CSIcon.Library.ICON_NEW));
		toolbarButton2.setIconOnly(true);
		toolbarButton2.setDescription(toolbarButton2.getCaption());

		toolbarButton3.setIcon(factory.createIcon(CSIcon.Library.ICON_DELETE));
		toolbarButton3.setIconOnly(true);
		toolbarButton3.setDescription(toolbarButton3.getCaption());

		toolbarButton4.setIcon(factory.createIcon(CSIcon.Library.ICON_PRINT));
		toolbarButton4.setIconOnly(true);
		toolbarButton4.setDescription(toolbarButton4.getCaption());

	}

	@Invoker({ @Invoker.For(id = "toolbarButton1", eventType = CSButton.ClickNotify), })
	public void onToolbarButton1Click(CSElement sender) throws Exception {
		app.ShowWindow(factory.createComponent(TestComponent1.class), "Второй");
	}

	@Invoker({ @Invoker.For(id = "toolbarButton2", eventType = CSButton.ClickNotify), })
	public void onToolbarButton2Click(CSElement sender) throws Exception {

		Calendar c = Calendar.getInstance();
		c.add(Calendar.MONTH, -6);

		Calendar c1 = Calendar.getInstance();

		query.setDateFrom(c.getTime());
		query.setDateTo(c1.getTime());

		CustomReportsFacade f = facade.getInterface(CustomReportsFacade.class);
		List<Edorepin> ls = f.queryEntities(query);

		cont.addBeans(ls);

	}

	@Invoker({ @Invoker.For(id = "toolbarButton3", eventType = CSButton.ClickNotify), })
	public void onToolbarButton3Click(CSElement sender) {
		ArrayList<Long> a = new ArrayList<Long>();
		a.add(1832L);
		a.add(1841L);
		// cont.removeBeans( a );

		//Object del = vt.getValue();
		//cont.removeBean((Long)del);


		// TODO: move to table implementation
		if (vt.getValue() != null) {
			Object del = vt.getValue();
			Object afterSelectId = vt.nextItemId(del);
			boolean needScroll = false;

			if (afterSelectId == null) {
				afterSelectId = vt.prevItemId(del);
				needScroll = true;
			}

			if (afterSelectId != null)
				vt.setValue(afterSelectId);

			cont.removeBean((Long)del);
			if (needScroll) {
				// vt.setCurrentPageFirstItemIndex(pindex);
				vt.setCurrentPageFirstItemId(afterSelectId);
			}
			// vt.setCurrentPageFirstItemIndex(pindex);
		}
	}

	@Invoker({ @Invoker.For(id = "toolbarButton4", eventType = CSButton.ClickNotify), })
	public void onToolbarButton4Click(CSElement sender) throws Exception {

		// Serialize
        FileOutputStream fout = new FileOutputStream("E:\\container.bin");
		ObjectOutputStream oos = new ObjectOutputStream(fout);
        oos.writeObject(cont);

        FileInputStream streamIn = new FileInputStream("E:\\container.bin");
        ObjectInputStream objectinputstream = new ObjectInputStream(streamIn);
        cont = (BeanViewContainer<Long, Edorepin>) objectinputstream.readObject();
        vt.setContainerDataSource(cont);

		Object[] columns = cont.getModel().getAccessiblePropertyNames();
		vt.setVisibleColumns( columns );
		for (Object idObj : columns ) {
			String propertyId = (String) idObj;
			vt.setColumnHeader(propertyId, cont.getModel().getPropertyModel(propertyId).getCaption());
			vt.setColumnCollapsed(propertyId,
					!cont.getModel().getPropertyModel(propertyId).isVisible() );
		}

	}

	@Invoker({ @Invoker.For(id = "maximizeButton", eventType = CSButton.ClickNotify), })
	public void onMaximizeClick(CSElement sender) throws Exception {

	}

	@Cleanup
	public void cleanup() {

	}

}





+ композиция в XML

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<?xml version="1.0" encoding="UTF-8"?>
<c:composition xmlns:c="composition"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="composition ../cs/core/client/api/composition/composition-schema.xsd ">
	
	<c:declare >
		<c:actionList>
			<c:action />
		</c:actionList>
	</c:declare>

	<c:content id="content" placement="vertical"  width="850px" height="650px"
		margin="false" spacing="false" >
		<c:toolbar>
			<c:button id="maximizeButton" title="Развернуть" />
			<c:button id="toolbarButton1" title="Открыть" />
			<c:button id="toolbarButton2" title="Создать" />
			<c:button id="toolbarButton3" title="Удалить" />
			<c:button id="toolbarButton4" title="Печать" />
			<c:button id="toolbarButton5" title="Закрыть" />
		</c:toolbar>
		<c:table id="tab" height="100%" width="100%" expandRatio="1" />
	</c:content>
</c:composition>
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38500205
Фотография -=*ShamaN*=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, тему можно закрывать...
...
Рейтинг: 0 / 0
Абстрагирование UI
    #38500310
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=*ShamaN*=-,
до заявленной темы ещё очень далеко. Хотя, трудно смотреть на код Прикладной, в котором есть "его тут быть не должно )"
- декларативно ГУИ должно быть отдельно, и там желательно описать не только Caption-Title, но и setIcon 15 строк и т.д. и т.п.
Т.е. файл описания ГУИ выше по скрину, никак не тянет на 15 строк.
...
Рейтинг: 0 / 0
54 сообщений из 54, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Абстрагирование UI
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]