powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Генерация пользовательского интерфейса
68 сообщений из 68, показаны все 3 страниц
Генерация пользовательского интерфейса
    #37958961
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, есть ли такие системы разработки ПО, где программисту достаточно задумываться только над логикой работы программы, а удобный графический пользовательский интерфейс (UI) строился бы автоматически? Например, генератор UI при запуске создавал бы экземпляр определённого в программе главного класса, для всех найденных в нём открытых полей создавал бы элементы управления. Для открытых методов создавал бы кнопки или пункты меню. Ну а дальше, конечно, реагировал бы на изменения внутренней структуры открытых членов этого экземпляра главного класса, равно как и на факты создания, изменения, удаления вложенных в него объектов.

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

Я пишу не о построении пользовательского интерфейса по модели базы данных или по некой структуре XML, а о том, что бы эту структуру не приходилось строить и связывать с кодом бизнес-логики руками, а иметь расширяемый генератор UI.

У меня есть опыт построения подобной системы разработки ПО, и ещё больше пока не реализованных идей по этому поводу. Но интересно, не придумываю ли я велосипед?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959032
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
d8m1k,
ну мой велик посмотри здесь
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959101
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1k,
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959164
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vill_ager, ViPRos, я правильно понимаю что в Ваших системах функциональность конечной программы расширяется через заполнение метаданных а не через написание кода? То есть в случае если понадобиться реализовать какую то совершенно непредусмотренуе возможность бизнес-логики: скажем, работа с другой базой данных или просто использовать другую ОРМ, или скажем взаимодействие с каким то внешним сервисом, то придётся дорабатывать сам фреймворк?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959170
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
d8m1k,
не обязательно, это зависит...
у меня скрипты на Python и Qt - пиши что хочешь
Базы внешние через ODBC и Qt можно можно открывать
MySql, SQLite - напрямую
только ORM я не использую, есть только класс для работы с таблицей/запросом
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959178
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1k,

ORM не нужен
а так куда хошь, как хошь, лазить можно (просто випрос вызовет твою фигню как плагин, если не задейстованы механизмы самой ВИПРОС), обычно это нафиг не надо
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959245
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos, навороченная система если всё в ней предусмотрено.
ViPRos, vill_ager, как я понял у вас другой подход - декларативное описание бизнес-логики с возможностью императивных вставок.

Я рассуждаю так. В любом языке существует ограниченный набор базовых типов данных. Для обеспечения возможности взаимодействия с пользователями так же может быть достаточно ограниченного набора юзер контролов. Пользовательский интерфейс можно упростить например до командной строки. Но при этом модель может быть очень сложной, например операционная система или ядерный реактор.

Можно в любой момент рефакторингом проанализировать состояние модели, считать структуру и значения и отобразить в аналогичном графическом виде. Но это не рационально. Лучше что бы представление подписывалось на события изменения состояний в модели и адекватно модифицировалось, отображало: открытые методы -> кнопки, открытые массивы -> гриды, открытые свойства -> поля для ввода, создание объекта -> создание панели или контрола.

Ещё, насколько я знаю, попытки формализовать написания кода с помощью например UML диаграмм пока провалились. Сложновато с помощью формального описания достичь таких же возможностей, которые легче реализовать в языке.

Ищу людей, кому тоже приходили в голову подобные мысли...
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959248
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1k Лучше что бы представление подписывалось на события изменения состояний в модели и адекватно модифицировалось, отображало: открытые методы -> кнопки, открытые массивы -> гриды, открытые свойства -> поля для ввода, создание объекта -> создание панели или контрола.


все так и есть и немного больше
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959253
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда я не понял, ViPRos, на каком языке разрабатываете бизнес-логику?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959275
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1k,

На любом (но лучше на нетовских или SQL)
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959352
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos, только необходим заботиться о событиях.

Например если захочу написать на C#
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class Sample {
	public int DoCount;

	private void Do() { DoCount+=1; }
}

public class Start {
	public Sample Obj = new Sample();
}



то не получиться запустить готовый генератор пользовательского интерфейса

Код: c#
1.
2.
3.
4.
5.
6.
static class Program {
	[STAThread]
	static void Main() {
		GeneratorUI.Generate(new Start());
	}
}



так что бы он создал форму c кнопкой Do и полем DoCount. При этом пользовался только рефлексией. Он не может знать что при вызове Do() обновиться DoCount и это значение нужно считать на форму.

Нужно вместо
Код: c#
1.
public int DoCount;



либо

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class Sample{
	public int DoCount {get{..} set {..; OnDoCountChanged();}
	public EventHandler DoCountChanged;
	protected void OnDoCountChanged() {
		if (DoCountChanged!=null) 
			DoCountChanged(this, new EventArgs());
	}
}


либо использовать во всех случаях специально обученные типы
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class Sample{
	public Sample(){
		DoCount = new MyInt(this);
	}

	public MyInt DoCount;
	private void Do() { DoCount.Value+=1; }
}



Для библиотечных типов тоже придётся делать обёртки, содержащие события.
То есть код получается громоздким, а вместо обычных методов и свойств C# приходиться использовать структуры данных.

Думаю Nemerle и АОП для этих целей подойдёт. Но может я не первый кто так думает?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959372
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1k,
в ВИПРОС явно указываются, какие методы типа в какую группу меню-кнопок попадет, так что нет нужды в аннотациях и рефлексии
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959456
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos, а если требуется переработать модель, заменить какую сущность на группу сущностей приходиться сопровождать эти явные указания?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959487
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1kДумаю Nemerle и АОП для этих целей подойдёт. Но может я не первый кто так думает?
нужно сначала разобраться в архитектуре системы. Вы задаете вопрос из области архитектуры, но в итоге скатываетесь к банальному программированию. Да хоть Немерль, хоть Паскаль подойдет, какая разница
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959510
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1kViPRos, а если требуется переработать модель, заменить какую сущность на группу сущностей приходиться сопровождать эти явные указания?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959622
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm,

Может и Brainfuck подойдёт.

Вообще про языки это продолжение темы, это второстепенно, но весьма существенно.

На голом C тоже можно подобие ООП строить, однако это неудобно. А на ассемблере наверное ещё сложнее. Есть вещи которые очень очень сложно эмулировать на неподходящем языке.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959793
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
d8m1kЯ, конечно, понимаю, что всех случаев, что можно запрограммировать и как это можно отобразить предусмотреть невозможно. Но может, есть попытки реализовать подобную систему для каких то специальных применений
Системы определенных классов: фактографические, учетные, бухгалтерские. Т.е если в систему заложена определенная модель, то в рамках этой модели все делается автоматом - не только UI, но структура данных, БЛ, отчетные формы и т.д. Все, что в модель не влазит, программируется вручную и вставляется плагинами.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37959974
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1kУ меня есть опыт построения подобной системы разработки ПО, и ещё больше пока не реализованных идей по этому поводу. Но интересно, не придумываю ли я велосипед?
а как читатели могут понять, придумываете ли вы велосипед или нет? Ни слова же не сказано об опыте и о том, какие варианты исследованы уже, почему они не подошли и почему ищется альтернатива
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37963180
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm, спасибо за интерес!

Попытаюсь описать суть моей архитектуры. Пользовательский интерфейс (UI) и бизнес-логика (модель) разделены. Взаимодействие с базой данных я не беру, это отдельная тема.

Модель во время выполнения представлена деревом вложенных друг в друга объектов. Объект может быть простого типа: число, дата, строка и т.п., может быть действием (паттерн команда), может быть составным типом: набором полей или массивом записей - таблицей. Таблица дополнительно может включать в свой состав поля и действия.

Для каждого типа: и простого и сложного предусмотрен свой класс, который кроме прочего предусматривает события на изменение своего состояния. События позволяют генератору UI выполнять свои функции. Для простых типов это ValueChanging и ValueChanged – начало и окончание обновления значения. Для таблицы – начало, окончание обновления или, например, события обновления перечня строк…

Для каждого типа модели на стороне UI есть свой контрол. Я использовал DevExpress. Полезной особенностью для моей идеи оказалась возможность настройки внешнего вида многих компонентов в режиме выполнения. Для числа, даты, строки и т.п. – приспособил потомки от CalcEdit, DateEdit, TextEdit. Для набора полей породил класс от LayoutControl. Для таблиц - потомок GridControl. Все эти потомки я обучил считывать содержимое объектов модели при связывании и подписываться на события.

При запуске приложения генератору UI вызывает некий метод из модели, который возвращает стартовый объект составного типа. Генератор создаёт соответствующий контрол и связывает его с объектом модели. Привязываясь, контрол считывает содержимое объекта модели и создаёт внутри себя соответствующие контролы, которые так же связаны. Действия модели становятся кнопками или инструментами на панели. Вложенные в объект наборы полей – всплывающими панелями. Объекты простых типов двусторонне связываются с моделью.

Если модель только написана и запущена 1-ый раз, то элементы на контролах располагаются по умолчанию: контролы в LayoutControl друг за другом списком, вложенные LayoutControl в панелях в определённом месте. Панель инструментов тоже аналогично. Я их настраиваю и запоминаю.

Каждый объект характерезует идентификатор сохранения. Обученные котролы запоминают внешнее представление в базу данных по составному ключу: идентификатор сохранения, пользователь.

Идентификатор сохранения определяет какие объекты одного и того же класса будут иметь один и тот же вид. Идентификатор сохранения в модели может быть вычислен из полного пути в дереве объектов модели – тогда представление экземпляра одного и того же класса модели, но в разных местах дерева будет запоминаться по-разному. Если идентификатор сохранения состоит из имени типа объекта, тогда все будут представлены одинаково. То есть легко добиться что бы, например, некий список, используемый для работы с ним как с таковым, выглядел внешне одним образом, а при использовании его в качестве словаря – другим образом.


Проиллюстрирую архитектуру на примере из реальной практики. Я значительно упростил задачу с целью показать используемый принцип как можно яснее.

В организацию поступают запросы на получение документов. От приложения требуется реализовать возможность прикреплять требуемые документы к запросу. Новые запросы разбирает исполнитель, который формирует список прикреплённых к запросу документов. Обработанные исполнителем запросы подписывает или направляет на доработку начальник. Начальник не может менять список документов.

Модель обработчика запросов я представил классом
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
internal class Request : FieldKitBase {
	internal Request(ModeBase mode) {
		this.mode = mode;
		rec = new RequestActiveRec(mode.ReadOnly);
		docs = new Docs();
	}

	protected override void CreateFields(ref FieldCollection fields) {
		fields.Add(docs);
		//поля для информации
		mode.CreateFields(this, ref fields);
	}

	protected override string Mode { get { return mode.GetType().ToString(); } }//идентификатор сохранения
	protected override object ID { get { return row.ID; } }
	protected override void Load(object id) { rec.Load(id); }
	protected override void Save() { rec.Save(); }

	private readonly ModeBase mode;
	private RequestActiveRec rec;
	private Docs docs;
}


В нём инкапсулировано относящееся ко всем режимам. В нём описано, что запрос включает некие поля в зависимости от режима, и одно поле для всех режимов поле - список документов, состав которого так же зависит от режима.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
internal class Docs : TableNestedBase {
	internal Docs(Request owner, ModeBase mode) {
		base.Owner = owner;
	}

	protected override void CreateActions(ref ActionList actionList) {
		mode.CreateAction(this, ref actionList);
	}
	internal override string Mode { get { return mode.Mode.GetType().ToString(); } }
	new private readonly Request Owner { get { return base.Owner as Request; } }
	private readonly ModeBase mode;
}


Все различая делегированы в потомки ModeBase (по принципу паттерна стратегии)
Код: c#
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.
public abstract class ModeBase {
	internal virtual void CreateActions(Docs docs, ref ActionList actionList) {
		actionList.Add(actionList.ActionDefault = new ActionShellExecute(docs));
	}
	internal virtual void CreateFields(Request request, ref FieldCollection fields) { }
	internal abstract bool ReadOnly { get; }

	protected Request request;
}

internal class ModeDocsPrepare : ModeBase {
	internal override bool ReadOnly { get { return false; } }
	internal override void CreateActions(Docs docs, ref ActionList actionList) {
		base.CreateActions(docs, ref actionList);
		actionList.Add(new ActionDocIns(docs));
		actionList.Add(new ActionDocDel(docs));
	}
}

public class ModeDocsSigning : ModeBase {
	internal override bool ReadOnly { get { return false; } }
	internal override void CreateFields(Request request, ref FieldCollection fields) {
		base.CreateFields(request, ref fields);
		fields.Add(new ActionDocSigned(request, docs));
		fields.Add(new ActionDocNotSigned(request, docs));
	}
}



Для исполнителя создаю объект
Код: c#
1.
new Request(new ModeDocsPrepare());


и связываю его
Код: c#
1.
Load(id_объекта);


Для начальника
Код: c#
1.
new Request(new ModeDocsSigning());


Для простого просмотра, без возможности каких либо изменений
Код: c#
1.
new Request(new ModeAll());


где
Код: c#
1.
2.
3.
	public class ModeOnlyView : ModeBase {
	internal override bool ReadOnly { get { return true; } }
}


Эти объекты передаю генератору объектов, который создаёт контролы, связывает, те в свою очередь наполняют себя контролами и связывают с соответствующими объектами модели. Динамически реагируют на изменения её интерфейса.

Не приходиться рисовать формы в дизайн тайме и связывать их с моделью. Приходиться располагать компоненты по местам.

Прикрепил принтскрин для иллюстрации.

iscrafmпочему они не подошли и почему ищется альтернатива
Ищу потому что предположил что не одному мне приходят в голову подобные идеи.
Осознал и недостатки наработок.
Понял, что таблицы и наборы полей реализуют одно и то же – включают в свой состав поля. А это много подобного кода. То есть неплохо бы предусмотреть возможность того, что таблицы могут включать таблицы и наборы полей как элементы контейнера. Наборы полей так же могут включать подтаблицы и наборы полей. Всего 4 варианта включений, из которых я реализовал только 2: таблица в наборе полей и набор полей в таблице. И получалось некрасиво там, где нужно привязать таблицу к таблице.
Кроме того, логично было бы, что бы простые типы так же могли бы включать в свой интерфейс, например, дополнительные действия.
Держусь варианта, что элемент любого типа может включать в свой состав элементы любого типа. То есть все элементы, выводимые в интерфейс, имели бы функциональность включения в свой состав других элементов. Так же каждый элемент мог являться каким-либо из базовых типов: метод, число, строка, дата, массив и т.п.
Смущает так же то, что вместо использования свойств и методов языка C# приходиться городить свои классы и работать через них. Это повело к эмуляции полиморфизма. То есть если определю действие в каком то базовом классе, то для перегрузки его в порождённом, я его удаляю и добавляю другое с тем же именем, вместо override.


P.S. На самом деле я подумал, что фраза
iscrafmнужно сначала разобраться в архитектуре системы. касается архитектуры випрос.

Вижу у ViPRos довольно развитая система, судя по принтскринам, до которой моим наработкам далеко. В ней взят за основу популярный вариант: ViPRos на основе реляционных структур данных с объектными расширениями на базе метаданных . Некая систему формального описывания для построения каркаса бизнес-логики, и конечно, оставляют лазейки для реализации нестандартного поведения - то, что не укладывается в придуманную схему. Пример: 1С, Visual Studio LightSwitch, где по модели базы данных строиться интерфейс. Ещё вариант XAML для декларативного описания графического интерфейса, но это чисто описание интерфейса, логику разумно вынести отдельно. Наверное, подобные идеи идут со времён появления графического интерфейса как такового. Я не о таких моделях, хотя они могут быть хороши.

Я думаю, вместо взять за основу язык, что ограничит и стандартизует представление представление, но не ограничит и не усложнит бизнес-логику. Тормозит то, что тот же C# не приспособлен для такой организации. Если бы была возможность подписываться на любое действие выполняемое в C# создание, уничтожение, изменение значения и состава объекта - было бы очевиднее.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37963181
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37963208
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1k,
спасибо за описание. понятно
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37963603
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1k,

Насколько я понимаю, после первого запуска нужна некая "настройка", для придания приложению "человеческого" вида. Это тоже своего рода программирование интерфейса, только визуальное.

1. Предполагается ли, что эта "настройка" будет определена создателем, и будет единой для всех пользователей? Или отдельные пользователи могут настраивать что-то под себя? Как соотносятся "пользовательские" и "централизованные" настройки?

2. Как и для всякого программирования, для "настройки" проявится необходимость контроля версий: "нет, вот кто и когда это натворил?". Есть ли это?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37963765
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher,

системные, ролевые, юзерские, можно и версионировать, хотя нафиг
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37963815
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моей системе есть генератор форм.
Не знаю это ли имел ввиду автор.
http://www.sql.ru/forum/actualthread.aspx?tid=874730
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37963956
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher, правильно понимаете! Нужна такая настройка. Только это просто декларативное описание. По сути это аналог работы в дизайнере среды разработки. Однако есть отличия:

Дизайнер среды разработки Моя системаДоступно море компонентов не обязательно адекватных модели На каждом этапе выполнения компоненты уже созданы и нужно только настроить их вид и взаимное расположениеМожно вкладывать компоненты в компоненты как угодно Порядок вложения уже определён моделью на каждом этапе работы системыНеобходимо связывать компоненты с моделью Компоненты уже связаны с интерфейсом модели

В девэкспрессе понаделали своих велосипедиков для такой визуальной настройки. У меня мечта - было бы здорово приспособить инструмент вроде Expression Blend, для WPF, только учитывающий упомянутые ограничения. Например, для каждого визуального контейнера был виден список всех элементов. Каждый элемент можно сопоставить с определённым компонентом из списка подходящих. Может есть смысл для каждого элемента создавать от 0 до нескольких компонентов. Всё это на этапе выполнения программы.

Поясню на примере некого редактора, в котором может быть открыто несколько документов одновременно. В классе документа в модели определено действие "сохранить". Классически в дизайнере среды разработки программист волен расположить кнопку "сохранить" в главном меню приложения и тогда прийдётся реализовывать логику доступности этой кнопки на случай если не один документ не открыт. То есть развивать ViewModel если по MVVM или Presentator если по MVP.
По моей задумке можно будет перемещать эту кнопку по панелям только внутри компонента документ - засунуть в меню документа, на панель инструментов, в статус бар, в локальное меню, но нельзя вынести кнопку в главном меню приложения, пока соответствующий интерфейс не будет предоставлен от модели. Вот если в модели написать фасад в классе редактор - создать действие "сохранить текущий документ", а в классе документа "сохранить" сделать недоступным - оставить для внутреннего использованию. Тогда кнопку можно будет настраивать уже в главном меню представления, а в компоненте документа она исчезнет.

Таким образом интерфейс модели полностью определяет внешний вид. Программный интерфейс классов однозначно отображается на визуальный интерфейс.

Cane Cat Fisher 1. Предполагается ли, что эта "настройка" будет определена создателем, и будет единой для всех пользователей? Или отдельные пользователи могут настраивать что-то под себя? Как соотносятся "пользовательские" и "централизованные" настройки?

Предусмотрены "центральные" настройки по-умолчанию, которые для каждой версии приложения свои, но единые для всех пользователей. У пользователя могут быть свои настройки, но не привязаны к версии программы.
Настройки по-умолчанию применяются в случаях
- если пользователь не сделал своих настроек в данном контейнере
- если сам намеренно удалил свои настройки
Есть какой-то контейнер модели изменился в новой версии. То пользователь у которого уже есть свои настройки соответствующего визуального компонента увидит новые элементы в стандартном месте, а старых не увидит. Например, новые столбцы таблицы увидит в конце. Новые поля будут доступны через настройки.

Cane Cat Fisher 2. Как и для всякого программирования, для "настройки" проявится необходимость контроля версий: "нет, вот кто и когда это натворил?". Есть ли это?

У меня этого не было. Все настройки хранились в базе данных. Но по-хорошему это нужно. Принципиальных трудностей не вижу. Можно настройки хранить, например, в файловой системе так же как и код программы. Только визуальные редактор конечно нужно обучить пользоваться системой контроля версий.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964003
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все это уже было.
Но стоит только шагнуть в сторону и вся эта стройная система, созданная для нескольких типовых документов, идет в лес.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964067
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb, да, очень похоже на мою задумку. Только формируются формы по интерфейсу объекта. Свойства компонентов я разделил на:
- относящиеся к логике взаимодействию с интерфейсом модели
- к внешнему виду.

Например доступность для редактирования определяются интерфейсом модели.
Для понимания
Код: c#
1.
public int Value { get; set;} 

привязанный компонент будет доступен для редактирования
Код: c#
1.
public int Value { get; private set;} 

только для чтения.

У меня это реализовано по-другому, вместо int использовал свои специально обученные на взаимодействия с представлением классы. Но суть такая.
В С# нельзя менять атрибуты private на public во время выполнения программы, много чего нельзя. Нужен либо динамически типизированный либо эмулировать это.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964151
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1kВ С# нельзя менять атрибуты private на public во время выполнения программы, много чего нельзя. Нужен либо динамически типизированный либо эмулировать это.
можно сгенерировать нужные классы из метаданных
а ваще нафиг не нужны эти классы, все генерируем из метаданных,а если уж кому то невмоготу без классов, то суем ему дайнамик
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964197
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1k Программный интерфейс классов однозначно отображается на визуальный интерфейс.
это одна из главных ошибок. Класс может быть один, а интерфейсов более одного.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964239
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1kSergey_rb, да, очень похоже на мою задумку. Только формируются формы по интерфейсу объекта. Свойства компонентов я разделил на:
- относящиеся к логике взаимодействию с интерфейсом модели
- к внешнему виду.

Например доступность для редактирования определяются интерфейсом модели.
Для понимания
Код: c#
1.
public int Value { get; set;} 

привязанный компонент будет доступен для редактирования
Код: c#
1.
public int Value { get; private set;} 

только для чтения.

У меня это реализовано по-другому, вместо int использовал свои специально обученные на взаимодействия с представлением классы. Но суть такая.
В С# нельзя менять атрибуты private на public во время выполнения программы, много чего нельзя. Нужен либо динамически типизированный либо эмулировать это.

ничего не понял.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964390
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmd8m1k Программный интерфейс классов однозначно отображается на визуальный интерфейс.
это одна из главных ошибок. Класс может быть один, а интерфейсов более одного.

Не верно выразился. Вернее будет:
Вид дерева объектов однозначно отображается на визуальный интерфейс.

Но это упрощённо. На самом деле даже один и тот же объект в разных местах дерева может отображаться по-разному.
Например список как таковой и список в качестве словаря для выбора.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964436
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, в список для выбора пользователь не может добавлять записи?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964445
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb, попробую пояснить.

Гипотетический генератор UI сканирует контейнер в модели - ищет все открытые свойства и методы.

Если он найдёт
Код: c#
1.
public int Value { get; set;}

то создаст TextBox и свяжет его с Value двусторонне. Т.е. при изменении значения в TextBox будет присваивать это значение Value.
А если встретит
Код: c#
1.
public int Value { get; private set;} 

то поймёт, что присваивать значение Value нельзя, поэтому логично сделать TextBox недоступным для редактирования.

Реакцию на TextBox на изменение Value можно было бы устроить если бы существовало некие события возникающие автоматически перед и после присвоения значения свойству Value. private или public, определяющие видимость свойств можно тоже задать только один раз при написании программы.

Поэтому на самом деле я использую некий класс MyInt у которого есть события ValueChanging, ValuetChanged, свойство public int Value. Так же свойство Visible, заменяющее модификатор доступа public/не public.

Использую эти классы следующим образом
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class Something{
  public Something(){
    Value = new MaInt(this);
  }
  public MyInt Value;

  public DoSomething(){
    Value.Value = 1; //в результате в представление поменяется значение
    Value.Visible.Value = false; //в результате в представление элемент скроется
  }
}

В объекте Value перед и после присваивания возникают события ValueChanging, ValueChanged. На изменение Visible тоже события, которые понимает генератор представления и адекватно реагирует. Так как Visible относиться к подобному типу MyBoolean устроенному по аналогии.

В представлении TextBox можно настроить: внешний вид, расположение, прилепить Caption, Hint. Всё это
запомнить относительно положения Value в модели. А следующий раз оно воспроизведётся.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964455
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbА что, в список для выбора пользователь не может добавлять записи?
Извините, не понял...
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964472
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1kSergey_rbА что, в список для выбора пользователь не может добавлять записи?
Извините, не понял...

Есть список выбора, но пользователю иногда надо прямо в этой форме добавить запись в этот список.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964475
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1kSergey_rb, попробую пояснить.

Гипотетический генератор UI сканирует контейнер в модели - ищет все открытые свойства и методы.

Если он найдёт
Код: c#
1.
public int Value { get; set;}

то создаст TextBox и свяжет его с Value двусторонне. Т.е. при изменении значения в TextBox будет присваивать это значение Value.
А если встретит
Код: c#
1.
public int Value { get; private set;} 

то поймёт, что присваивать значение Value нельзя, поэтому логично сделать TextBox недоступным для редактирования.

Реакцию на TextBox на изменение Value можно было бы устроить если бы существовало некие события возникающие автоматически перед и после присвоения значения свойству Value. private или public, определяющие видимость свойств можно тоже задать только один раз при написании программы.

Поэтому на самом деле я использую некий класс MyInt у которого есть события ValueChanging, ValuetChanged, свойство public int Value. Так же свойство Visible, заменяющее модификатор доступа public/не public.

Использую эти классы следующим образом
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class Something{
  public Something(){
    Value = new MaInt(this);
  }
  public MyInt Value;

  public DoSomething(){
    Value.Value = 1; //в результате в представление поменяется значение
    Value.Visible.Value = false; //в результате в представление элемент скроется
  }
}

В объекте Value перед и после присваивания возникают события ValueChanging, ValueChanged. На изменение Visible тоже события, которые понимает генератор представления и адекватно реагирует. Так как Visible относиться к подобному типу MyBoolean устроенному по аналогии.

В представлении TextBox можно настроить: внешний вид, расположение, прилепить Caption, Hint. Всё это
запомнить относительно положения Value в модели. А следующий раз оно воспроизведётся.

А если это поле не должен редактировать один пользователь, но должен редактировать другой?
Или документ находится в статусе редактирования, потом переходит в другой статус и закрывается для редактирования?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964531
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЕсть список выбора, но пользователю иногда надо прямо в этой форме добавить запись в этот список.

Непосредственно в список по задумкие почему нет. Список - массив элементов. Тоже может быть связан с моделью. Модель может разрешить добавлять элементы пользователю.

Можно чуточку поконкретней, если не сложно? Список не сам по-себе он где-то используется?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964537
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если это поле не должен редактировать один пользователь, но должен редактировать другой?
Значит экземпляр приложения одного пользователя должен создавать поле доступным, а у дрогого недоступным.
К сожалению не получается для одного пользователя создать
Код: c#
1.
public int Value { get; set;}

а для другого
Код: c#
1.
public int Value { get; private set;}

Зато можно всё это реализовать в MyInt, например ввести понимаемое генератором UI свойство ReadOnly или Enabled.
Или документ находится в статусе редактирования, потом переходит в другой статус и закрывается для редактированияаналогично
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964540
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь заполняет приходную накладную.
В накладной есть товар, которого нет в базе.
Пользователю надо добавить товар в базу не закрывая формы приходной накладной.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964572
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb, пример ясен.

Да.
На уровне модели есть этот список.
На уровне представления грид, связанный с этим списком. Модель разрешает представлению редактировать список, предоставляет ему интерфейс для редактирования например IList<object> если на C#, вместо IEnumirable<object>
Генератор UI понимает это и создаёт грид редактируемым. При добавлении строки сообщает модели, что добавилась строка. В модели на событие изменения таблицы тоже могут быть навешаны свои обработчики, благодаря чему модель можно запрограммировать, например, сохранять изменения сразу, а так же обновлять логически связанные элементы.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37964584
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbВсе это уже было.
Но стоит только шагнуть в сторону и вся эта стройная система, созданная для нескольких типовых документов, идет в лес.Мне самому интересно насколько описываемая система жизнеспособна. Насколько много всевозможных необходимых вариантов визуализации или можно для большинства применений ограничиться каким то конечным набором. По аналогии как например достаточно базовых типов данных в языке программирования: строка, массив, запись.

Вижу такая система плохо подходит для написания игрушек, интернет-магазинов, отчётной системы...
Но для ведения учётов, картотек, где оперируют небольшим наборов типов данных однообразным образом. Хочется понять насколько там возможны различные непредсказуемые вариации.

Буду рад каким либо примерам
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37965107
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey_rbПользователю надо добавить товар в базу не закрывая формы приходной накладной.
Ессно. Но для этого придумали MDI
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37965244
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1kSergey_rbВсе это уже было.
Но стоит только шагнуть в сторону и вся эта стройная система, созданная для нескольких типовых документов, идет в лес.Мне самому интересно насколько описываемая система жизнеспособна. Насколько много всевозможных необходимых вариантов визуализации или можно для большинства применений ограничиться каким то конечным набором. По аналогии как например достаточно базовых типов данных в языке программирования: строка, массив, запись.

Вижу такая система плохо подходит для написания игрушек, интернет-магазинов, отчётной системы...
Но для ведения учётов, картотек, где оперируют небольшим наборов типов данных однообразным образом. Хочется понять насколько там возможны различные непредсказуемые вариации.

Буду рад каким либо примерам

Есть некий справочник. Из одной формы он должен предлагать все записи. Из другой - только актуальные на сегодня. Из третьей - с учетом значения, введеного в соседнем контроле.

Куда предполагается долепить дополнительные условия выборки, к какому объекту привязать?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37965386
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherЕсть некий справочник. Из одной формы он должен предлагать все записи. Из другой - только актуальные на сегодня. Из третьей - с учетом значения, введеного в соседнем контроле.
Куда предполагается долепить дополнительные условия выборки, к какому объекту привязать?Иметь возможность открывать выборку с фильтром. Набор возможных фильтров привязать к самой выборке настроенной в метаданных.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37965488
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1kSergey_rb, пример ясен.

Да.
На уровне модели есть этот список.
На уровне представления грид, связанный с этим списком. Модель разрешает представлению редактировать список, предоставляет ему интерфейс для редактирования например IList<object> если на C#, вместо IEnumirable<object>
Генератор UI понимает это и создаёт грид редактируемым. При добавлении строки сообщает модели, что добавилась строка. В модели на событие изменения таблицы тоже могут быть навешаны свои обработчики, благодаря чему модель можно запрограммировать, например, сохранять изменения сразу, а так же обновлять логически связанные элементы.

Добавлять надо не в гриде, а в форме ввода товарной позиции со всеми проверками.

Иначе получается что-то вроде 1С.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37965517
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbДобавлять надо не в гриде, а в форме ввода товарной позиции со всеми проверками.
а в гриде разве проверок нет? если в системе существует какая-то зависимость от того, в какой форме в нее можно добавить запись, то явно где-то прокол в ее архитектуре.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37965679
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherЕсть некий справочник. Из одной формы он должен предлагать все записи. Из другой - только актуальные на сегодня. Из третьей - с учетом значения, введеного в соседнем контроле.

Куда предполагается долепить дополнительные условия выборки, к какому объекту привязать?
Предлагаю делегировать дополнительные условия в отдельный класс, скажем AdditionalFilterBase

Схематично так:
Сам справочник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Handbook : DataTable {
	public Handbook(AdditionalFilterBase additionalFilter) {
		this.additionalFilter = additionalFilter;
	}

	internal void Load(){
		new OracleDataAdapter(
			"select * from HANDBOOK where "+additionalFilter.Value, 
			Config.ConnectionString
		).Fill(this);
	}

	private readonly AdditionalFilterBase additionalFilter;
}

Вынесенный шаблон фильтра
Код: c#
1.
2.
3.
internal abstract class AdditionalFilterBase {
	internal abstract string Value { get; }
}

Конкретные варианты этого вынесенного фильтра
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
internal class AdditionalFilterAll : AdditionalFilterBase {
	internal override string Value { get { return "1=1"; } }
}
internal class AdditionalFilterToday : AdditionalFilterBase {
	internal override string Value { get { return "DATECREATE >= trunc(SYSDATE)"; } }
}
internal class AdditionalFilterAdjacentControlDependent : AdditionalFilterBase {
	///<param name="meanOfAdjacentControl">MyString - понимаемый генератором UI класс</param>
	internal AdditionalFilterToday(MyString meanOfAdjacentControl) {
		this.meanOfAdjacentControl = meanOfAdjacentControl;
	}

	internal override string Value { get { return "TEXT like '%"+meanOfAdjacentControl.Value+"%"; } }

	private readonly MyString meanOfAdjacentControl;
}

Экземпляры справочника. В одном месте модели так
Код: c#
1.
var hb = new Handbook(new AdditionalFilterAll()); hb.Load();

В другом так:
Код: c#
1.
var hb = new Handbook(new AdditionalFilterToday()); hb.Load();

В третьем так:
Код: c#
1.
var hb = new Handbook(new AdditionalFilterAdjacentControlDependent(некое поле)); hb.Load();


Разные hb создаются в разных местах модели.
Получается класс 1 а объекты по разному устроены.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37965696
d8m1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbДобавлять надо не в гриде, а в форме ввода товарной позиции со всеми проверками.
В принципе возможно валидация в строке грида так же как на форме. Строка грида - это тот же набор полей.

Валидация относиться к функциональности и логично вынести код валидации в модель.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37966872
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d8m1kSergey_rbДобавлять надо не в гриде, а в форме ввода товарной позиции со всеми проверками.
В принципе возможно валидация в строке грида так же как на форме. Строка грида - это тот же набор полей.

Валидация относиться к функциональности и логично вынести код валидации в модель.

Как будет осуществлен контроль ввода на уровне прав пользователей?
Допустим кладовщик не имеет право редактировать поле "Заказано", его может править только менеджер и только когда документ в статусе заказа.
И наоборот, менеджер не имеет права править поле "Отпущено", а кладовщик имеет.
Когда документ переходит в статус "отгружено", то уже никто не имеет права редактировать эти поля.

А поле "цена" может видеть только менеджер и не имеет права ВИДЕТЬ кладовщик.
Как это собираетесь реализовать в гриде?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37966884
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbКак будет осуществлен контроль ввода на уровне прав пользователей?
Допустим кладовщик не имеет право редактировать поле "Заказано", его может править только менеджер и только когда документ в статусе заказа.
И наоборот, менеджер не имеет права править поле "Отпущено", а кладовщик имеет.
Когда документ переходит в статус "отгружено", то уже никто не имеет права редактировать эти поля.

А поле "цена" может видеть только менеджер и не имеет права ВИДЕТЬ кладовщик.
Как это собираетесь реализовать в гриде?Ввести такое понятие, как флаг запрета в гриде. По состоянию этого флага нужные поля разрешаются/запрещаются.
Разумеется выборка должна знать, кто именно ее "вычитал".
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37966893
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVSergey_rbКак будет осуществлен контроль ввода на уровне прав пользователей?
Допустим кладовщик не имеет право редактировать поле "Заказано", его может править только менеджер и только когда документ в статусе заказа.
И наоборот, менеджер не имеет права править поле "Отпущено", а кладовщик имеет.
Когда документ переходит в статус "отгружено", то уже никто не имеет права редактировать эти поля.

А поле "цена" может видеть только менеджер и не имеет права ВИДЕТЬ кладовщик.
Как это собираетесь реализовать в гриде?Ввести такое понятие, как флаг запрета в гриде. По состоянию этого флага нужные поля разрешаются/запрещаются.
Разумеется выборка должна знать, кто именно ее "вычитал".

Выборка сможет сделать невидимыми некоторые поля, в зависимости от прав пользователя?

Еще есть тема, когда документ, созданный одним менеджеров, могут видеть или не видеть другие менеджеры и часть из тех, кто видит документ, имеют право его редактировать.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37966910
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbLSVпропущено...
Ввести такое понятие, как флаг запрета в гриде. По состоянию этого флага нужные поля разрешаются/запрещаются.
Разумеется выборка должна знать, кто именно ее "вычитал".

Выборка сможет сделать невидимыми некоторые поля, в зависимости от прав пользователя?

Еще есть тема, когда документ, созданный одним менеджеров, могут видеть или не видеть другие менеджеры и часть из тех, кто видит документ, имеют право его редактировать.Запросто. Просто показывать пустое поле. Элементарный подзапрос в SELECT.
У нас именно так и сделано.
Права "пользователь-пользователь" тоже есть. В разрезе типов документов и самого документа.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37966960
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС все это собирается решить с помощью волшебных классов.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37967822
Alexsalog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вы думаете, если разрабатывать такую систему с "генерацией интерфейса", то что лучше - зашитые высокоуровненвые свойства или некий вариант кодогенерации ?

Поясню вопрос на примере: допустим у меня есть контрол - поле ввода со справочником.
Я разрабатываю его так, что в качестве источника данных он ждет заполнения своей внутренней MemTable. В таком варианте этот контрол отвязан от реализации работы с данными в рассматриваемой "платформе".
То есть контрол создан один раз и все. А как потом у меня поменяются внутренности платформы, как там изменятся наборы свойств и атрибутов, через которые я буду задавать поведение интерфейсов, создаваемых с помощью "платформы" - это созданный котрол уже не волнует.

Это один подход.

Другой подход- это когда полю со справочником приписывается высокоуровневое свойство - "Имя сущности-источника данных для списка." Это 1С-ный подход такой. Приписывается такой высокоуровневый атрибут и обрабатывается он потом внутри контрола уже.

В первом подходе я имею возможность кроме всего прочего использовать контрол не только как поле со справочником но и по всякому разному еще, окружая его разными вариантами буферного кода.

Во втором варианте - он у меня используется только так как задано платформой и никак иначе.

Что лучше? Во втором варианте все проще и быстрее наверное. В первом мне нужно управлять как то кодом-оберткой.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37967943
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
первый вариант проще и быстрее в разработке, второй - проще и быстрее для реализации прикладного решения. Т.е. нужно просто выбрать приоритет
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37970264
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexsalogКак вы думаете, если разрабатывать такую систему с "генерацией интерфейса", то что лучше - зашитые высокоуровненвые свойства или некий вариант кодогенерации ?



Я выбрал вариант с кодогенерацией.
Теперь генерирую формы к различным системам, в т.ч. к системам не относящимся к документообороту.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37971131
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясните за суть темы.
Здесь изобретают волшебный UI-фреймворк?
С какими целями?
Не проще ли открыть для себя (или изучить), наконец, html, javascript, gwt, xul или что-то подобное?
Я понимаю ещё можно что-то обсуждать насчет таких задач как генерация интерфейса к голым таблицам для админки, а для остального - разве можно сделать что-то универсальное, и если сделаете, будет ли оно чем-то проще существующих решений?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37971179
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛагманПоясните за суть темы.
Здесь изобретают волшебный UI-фреймворк?
первое сообщение в теме прочитайте
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37971181
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛагманЯ понимаю ещё можно что-то обсуждать насчет таких задач как генерация интерфейса к голым таблицам для админки, а для остального - разве можно сделать что-то универсальное, и если сделаете, будет ли оно чем-то проще существующих решений?
а в чем проблема сделать? Да, не просто. Но все реализуемо
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37971205
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37973772
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аффтар!
Давай пойдём от противного)
Я в Delphi тоже не пишу никакой код для Гуи.
Только бизнес-логику.
Только свойства контрола.
Только биндинг или связь контроль с поставщиком данных.

И с каких пор ГУИ зависит от класса ....его паблик свойств и т.д.
Велосипед.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37975268
Фотография Asm64D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я когда в институте был и писал на Delphi тоже очень загорелся желанием автогенерации интерфейса и даже написал велосипед, создавался класс (форма), описывался тип поля, тип отображения и режим редактирования и все это было хорошо, пока юзеры не стали просит все больше и больше различий в стандартных формах и в какой-то момент я понял что настала ж**па. Потом я пошел по пути кодогенерации форм и написал генератор форм, т.е. базово генерировался код формы, а отличии потом вносились ручной правкой, потом я написал велосипед - ORM и тоже с кодогенерацией, а потом в какой-то момент я понял что мне проще и быстрей написать изменения самому чем заново генерировать измененный объект (класс сущности и форму).
На данный момент, уже на C# и на Python я использую базовую генерацию, которая мне существенно экономит время на написании однотипного кода, а потом дописываю специфический код, а вот формы я рисую в ручную, ну нравиться мне "кнопочки на форму кидать", а вот после создания форм, добавляю механизмы позволяющие в БД хранить алгоритмы расчета и базовые настройки отображения форм, которые у разных юзеров могут быть разными и права доступа к формам этих юзеров и получается очень гибко, особенно с учетом того что меняются только алгоритмы расчета параметров и параметры отображения.
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37975619
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asm64D,
+1
каждый программист писал свою IDE )))
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37988979
mimino787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я выбрал вариант с кодогенерацией.
Теперь генерирую формы к различным системам, в т.ч. к системам не относящимся к документообороту.

это верно
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37989457
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mimino787Я выбрал вариант с кодогенерацией.
Теперь генерирую формы к различным системам, в т.ч. к системам не относящимся к документообороту.

это верно

я что-то не понял.
кто-то украл мою идею?
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #37989826
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbmimino787Я выбрал вариант с кодогенерацией.
Теперь генерирую формы к различным системам, в т.ч. к системам не относящимся к документообороту.

это верно

я что-то не понял.
кто-то украл мою идею?
да, борланд в свое время. как ты допустил!
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #38026007
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Asm64D,
+1
каждый программист писал свою IDE )))

Есть такая шутка про программистов:
Какую программу не пишешь,-а всё компилятор получается.:-)
...
Рейтинг: 0 / 0
Генерация пользовательского интерфейса
    #38027684
trdm_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbДобавлять надо не в гриде, а в форме ввода товарной позиции со всеми проверками.
Иначе получается что-то вроде 1С.
скорость ввода упадет до черепашьей...
...
Рейтинг: 0 / 0
68 сообщений из 68, показаны все 3 страниц
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Генерация пользовательского интерфейса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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