Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
.NET 4.x

Архитектура приложения клиент, прошу совета

16.12.2015, 12:15. Показов 943. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ситуация - есть некий программный сервер с БД и текущими состояниями массива объектов.
Приложение цепляется к нему по WCF.
Приложение имеет интерфейс пользователя для отображения данных с сервера в табличном виде, в виде списка параметров (в зависимости от запроса), передачи данных на сервер для инициации каких-либо действий сервером или изменения данных в БД.
Сейчас реализован интерфейс Wcf и необходимые DataContract для обмена данными. DataContract представляют собой массивы классов содержащих поля данных. Это сделано в виде отдельной DLL, подключаемой и к серверу, и к приложению.
Запнулся на этапе построения архитектуры приложения. Я вижу:
1) Класс-клиент Wcf, организующий связь с сервером и использующий методы интерфейса для обмена данными;
2) Класс-хранилище настроек приложения (с сохранением настроек во внешнюю среду);
3) Интерфейс пользовательского интерфейса;
4) Реализация интерфейса пользовательского интерфейса (сори за тафталогию);
5) Класс рабочего потока (при необходимости несколько) - организующий связи между компонентами программы в том числе в нескольких потоках;
6) Собственно сам пользовательский интерфейс (сейчас - WinForm).

Передавать данные в пользовательский интерфейс планирую в виде DataTable или массива строк в зависимости от запроса. Из пользовательского интерфейса в рабочий поток либо строки, либо вызывать функции без аргументов. Необходимые проверки строк и их преобразование делать в классе, реализующем интерфейс интерфейса.

Прошу оценить данную концепцию.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2015, 12:15
Ответы с готовыми решениями:

Архитектура клиент-серверного приложения для многопользовательской работы через интернет в real-time режиме
Приветствую уважаемое сообщество. Нужно срочно собрать мысли по следующей теме. Необходимо создать работающий прототип некого...

Прошу совета по отображению данных на странице
Здравствуйте! Вопрос возможно глупый, но все же. Помогите, пожалуйста, с отображением данных на странице. В смысле какие лучше контролы...

Прошу совета
Необходимо реализовать некоторый формат файла представляющего собой контейнер, так скажем виртуальную файловую систему (ВФС). Необходимо...

8
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
16.12.2015, 12:37
aquaMakc, не все понял, но как я бы сделал.
1. Класс-менеджер клиента. Внутренне использует либо сгенерированный класс по метаданным сервера, либо канал будет создаваться на лету через ChannelFactory<T>.
Так же менеджер клиента должен содержать метод проверки работоспособности сервера (на случай, если он отвалился и не работает).
2. Хранилище настроек - класс-синглтон.
3. Собственно пользовательский интерфейс, работающий с менеджером клиента.
По поводу контрактов данных-у вас они уже есть, в отдельной либе.
Что касается остального-я не понял.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
16.12.2015, 13:34
Цитата Сообщение от aquaMakc Посмотреть сообщение
Передавать данные в пользовательский интерфейс планирую в виде DataTable
А зачем вам DataTable, если у вас уже есть классы DTO (те которые в вашем DataContract) ?

интерфейс интерфейса - Шото страшное.
тафталогия -> тавтология
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
16.12.2015, 13:54  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
тафталогия -> тавтология
))) спасибо

Цитата Сообщение от Storm23 Посмотреть сообщение
интерфейс интерфейса - Шото страшное.
имеется ввиду interface, от которого планирую унаследовать класс, отвечающий за работу с формочкой. Если честно, особой необходимости не вижу, скорее для эксперимента и вполне готов отказаться от лишней абстракции.

класс, отвечающий за работу с формочкой != класс формы. Это класс, которому эта форма принадлежит

Цитата Сообщение от Storm23 Посмотреть сообщение
А зачем вам DataTable
Т.к. в планах поддержка нескольких языков интерфейса (опять - таки для эксперимента), DataTable хочу создавать на основе этих самых DataContract, но в нужном мне виде, передавать в форму и там присваивать их DataSource`ам DataGridView.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
16.12.2015, 14:03
Цитата Сообщение от Storm23 Посмотреть сообщение
зачем вам DataTable
Тоже хотел задать этот вопрос)))
DataTable - NET-овский тип, зачем его выводить за границы службы? Используйте нейтральные сущности, к примеру массивы. Или, как сказано выше, ваши контракты данных.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
16.12.2015, 14:12  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Или, как сказано выше, ваши контракты данных
Я хочу максимально автоматизировать вывод больших данных на форму. Форма данные получила, в DataSource нужной DataGridView засунула и всё и без предварительной их настройки. Если я буду указывать источник DataContract - заголовки столбцов будут соответствовать именам свойств, отображаться будут все без исключения данные (которые в некоторых случаях надо скрывать), да и порядок их будет точно соответствовать указанному в контракте.
Формировать же DataGridView из контракта в классе формы я не хочу.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
16.12.2015, 16:32
Цитата Сообщение от aquaMakc Посмотреть сообщение
Если я буду указывать источник DataContract - заголовки столбцов будут соответствовать именам свойств.
Ну вообще-то имя столбца в DGV можно задавать с помощью атрибута [DisplayName] в свойстве. Т.е. заголовок столбца может быть отличным от имени свойства.
Цитата Сообщение от aquaMakc Посмотреть сообщение
Формировать же DataGridView из контракта в классе формы я не хочу.
Ну смотрите, вам все равно где-то придется преобразовывать свои DTO в вид пригодный для формы.
Если сами DTO не подходят, то для них делается враппер, который будет давать наружу нужные свойства с нужными названиями. И в форму передается список/массив таких объектов.
Вы же все равно будете делать то же самое, но с той разницей, что DataTable - слабо типизированный объект и с ним работать немного сложнее чем с типизированным списком, ИМХО.
Впрочем, не видя код тут трудно что сказать. Будет код - можно будет оценить более предметно.
1
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
16.12.2015, 16:55  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
Ну вообще-то имя столбца в DGV можно задавать с помощью атрибута [DisplayName] в свойстве
Я знаю, но не хочу вообще руками прикасаться к DGV.

Цитата Сообщение от Storm23 Посмотреть сообщение
Если сами DTO не подходят, то для них делается враппер, который будет давать наружу нужные свойства с нужными названиями.
Хорошая идея.

Цитата Сообщение от Storm23 Посмотреть сообщение
Впрочем, не видя код тут трудно что сказать. Будет код - можно будет оценить более предметно.
Код в процессе создания. Хочу предварительно с архитектурой определиться.

Остановлюсь наверно, на врапперах, а interface для диспетчера окошек пока задвину под комод. "Скрипач не нужен" ©

Добавлено через 4 минуты
Да, кстати...
Цитата Сообщение от aquaMakc Посмотреть сообщение
свойства с нужными названиями
Очень не хочется в обёртках свойствам давать имена на русском, хотя знаю, что можно. Этому есть рациональное объяснение, или я зря переживаю?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
16.12.2015, 17:32
Цитата Сообщение от aquaMakc Посмотреть сообщение
Очень не хочется в обёртках свойствам давать имена на русском, хотя знаю, что можно
Еще раз: Атрибут [DisplayName]
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2015, 17:32
Помогаю со студенческими работами здесь

Прошу совета с Async TCP Client
Добрый день! Недавно у меня возникла задача: отправлять и читать данные с сервера, нашел в сети хорошую реализацию на gitHub ...

Прошу совета по извлечению текста
Здравствуйте, уважаемые специалисты! Подскажите, пожалуйста, как правильно извлечь текст какой-нибудь статьи из html кода? Попробовал...

Приложения сами закрываются,прошу совета.
Здравствуйте,у меня проблема.:( Начали сами по себе закрываться приложения,в часности такие как скайп,icq,icqlite,garena и starcraft II...

Прошу совета - клиент-серверная онлайн-игра через web с браузерным клиентом на JavaScript
Добрый день Суть моего обращения, такова: Разрабатываю компьютерную игру (пошаговую, передаваемые данные незначительны по объёму)....

Архитектура клиент серверного приложения
Добрый день. Возникла идея проекта, но как реализовать его я не представляю. Есть клиентское андроид приложение, в котором присутствует...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru