|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
Помогите пожалуйста определиться в концепции разработки многомодульных приложений? Где имеется ядро программы, а модули разрабатывают несколько групп разработчиков. Ниже описал примерно как я это вижу. Хотелось бы услышать мнение тех, кто уже занимался подобными проектами. Основные критерии к разработки: 1. Создание ядра программы, с концепцией многомодульной работы; 2. Модули в ядро должны подгружаться по мере необходимости; 3. Обновление модулей должно производиться в фоновом режиме; 4. Настройка доступа должна быть общей для всех модулей и реализована в ядре программы; 5. База данных может быть локальная или сетевая (соединение устанавливается из ядра программы) 6. Подгружаемый модуль может использовать текущую базу данных ядра программы(получает конекшины из ядра программы) или свою(использует свои конекшины) Что уже сделал: 1. Создал проект (Ядро программы); 2. Реализовал постраничную навигацию NavigationService; 3. Чтение модулей (dll) Assembly.LoadFrom(*.dll); 4. Из (dll) с помощью интерфейсов выдергиваю страницы, которые имеются в модуле I. Интерфейсы используемые для dll: IBoot - для описания подключаемого модуля; IViewModel - для корневых страниц (таблицы данных); IViewEditModel - для страниц редактирования данных (выбранной позиции из IViewModel); IViewDictModel - для страниц просмотра/редактирования данных справочников; IObserver - понимаю что тоже нужно, но как применить не знаю. II. Интерфейсы используемые для dll общего назначения: IBoot - для описания сервиса; IViewPageFunctionModel - для страницы справочников Не могу понять как реализовать работу с базой данных, используя EntityFramework Fluent? Так как в каждом модуле(dll) имеются свои сущности, которые должны как-то скармливаться в ядро программы Domain. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 09:31 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
Nechto, зайди в ветку ERP и напиши тут, прототип какого ERP ты пишешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 10:35 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
в C# сделать обновление в фоновом режиме UI модулей, это как мне кажется нереальная хрен. если обычный модуль\DLL можно загрузить в левый домен и потом выгрузить и обновить, то для UI Контролов вам нужно грузить файлв в домен приложения и выгрузить после этого его уже будет нельзя. А если нельзя выгрузить,то и обновить будет мало реально. модульность делается легко загружаете DLL, находите в ней все классы наследующие интерфейс ISomeOne, запоминаете, потом создаете на основе типов инстансы ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 11:08 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
Да структура проекта ERP. Мне нужно, для несколько отделов создать одну платформу. У каждого отдела будут свои модули(dll). Базы данных, скорее всего тоже будут разные. Отделы взаимодействуют между собой, поэтому должна быть какие-то связи, между модулями. При помощи этого можно обновлять в реальном времени. 3. Чтение модулей (dll) Assembly.LoadFrom(*.dll); Roman Mejtes модульность делается легко загружаете DLL, находите в ней все классы наследующие интерфейс ISomeOne, запоминаете, потом создаете на основе типов инстансы С этим согласен А как реализовать работу с базой данных? EF я так понимаю не подходит для ERP проектов? Так как, EF создает модель только один раз при старте проекта(ядра) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 12:26 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
NechtoДа структура проекта ERP. Мне нужно, для несколько отделов создать одну платформу. У каждого отдела будут свои модули(dll). Базы данных, скорее всего тоже будут разные. Отделы взаимодействуют между собой, поэтому должна быть какие-то связи, между модулями. При помощи этого можно обновлять в реальном времени. 3. Чтение модулей (dll) Assembly.LoadFrom(*.dll); Roman Mejtesмодульность делается легко загружаете DLL, находите в ней все классы наследующие интерфейс ISomeOne, запоминаете, потом создаете на основе типов инстансы С этим согласен А как реализовать работу с базой данных? EF я так понимаю не подходит для ERP проектов? Так как, EF создает модель только один раз при старте проекта(ядра) ну как мне кажется, это нужно либо отдать на откуп модулю, то есть в каждом модуле работа с БД организована своя, тем более вы пишите, что у каждого модуля своя база. Тут вполне подходит антипаттерн локатора служб. Подключая модуль вы подключаете набор служб зная заранее контракт каждой из них, то есть процесс взаимодействия вы спроектируйте на этапе архитектурной разработки. Нужно просто продумать все интерфейсы, сделать локатор и штамповать сервисы. можно сделать отдельный сервис для работы с базами данных. в проектах, что я писал, для взаимодействия между модулями, можно использовать события\делегаты, в параметрах события, делать маршрутизацию, если модули в виде дера и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 12:32 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
NechtoДа структура проекта ERP. ещё раз. "Врага нужно знать в лицо". Имя сестра, имя!!! Какую систему копируем? NechtoА как реализовать работу с базой данных? EF я так понимаю не подходит для ERP проектов? Так как, EF создает модель только один раз при старте проекта(ядра) если копируем 1С, то там ядро стартует при старте конфигурации. Т.е. есть Модель ядра и есть модель бизнеса-предметки. Время разработки от 5 человеко-лет. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 12:54 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
Roman Mejtes Подключая модуль вы подключаете набор служб зная заранее контракт каждой из них, то есть процесс взаимодействия вы спроектируйте на этапе архитектурной разработки. Нужно просто продумать все интерфейсы, сделать локатор и штамповать сервисы. Roman Mejtes можно сделать отдельный сервис для работы с базами данных. в проектах, что я писал, для взаимодействия между модулями, можно использовать события\делегаты, в параметрах события, делать маршрутизацию, если модули в виде дера и т.д. Выделил жирным что я не понял: - под службами вы что имели ввиду? - локатор это какое-то расширение? А общие справочника как вы реализовывали, которые могут использоваться в нескольких модулях? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 13:04 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
Petro123NechtoДа структура проекта ERP. ещё раз. "Врага нужно знать в лицо". Имя сестра, имя!!! Какую систему копируем? NechtoА как реализовать работу с базой данных? EF я так понимаю не подходит для ERP проектов? Так как, EF создает модель только один раз при старте проекта(ядра) если копируем 1С, то там ядро стартует при старте конфигурации. Т.е. есть Модель ядра и есть модель бизнеса-предметки. Время разработки от 5 человеко-лет. IMHO Мне понравилось как это сделано, в Sap Logon. Но интерфейс там не дружелюбный и навигация не совсем удобна. За основу взял её иерархию TreeView, там грамотно разложено все по отделам и видами работ. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 13:12 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
NechtoМне понравилось как это сделано, в Sap не слишком круто для подражания? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 13:21 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
Petro123NechtoМне понравилось как это сделано, в Sap не слишком круто для подражания? Я же её не переписывать собираюсь :) а говорю что мне в ней понравилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 13:41 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
NechtoЯ же её не переписывать собираюсь :) а говорю что мне в ней понравилось. угу. Смотрел на королеву, а женился на кухарке) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 14:11 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
Roman Mejtesв проектах, что я писал, для взаимодействия между модулями, можно использовать события\делегаты, в параметрах события, делать маршрутизацию, если модули в виде дера и т.д. Я не совсем понимаю во взаимодействиях между модулями. К примеру: Транспортный отдел внес новый автомобиль в свою БД из своего модуля. -> Служба по ремонту имеет свой модуль и БД, ей нужно как-то удивить этот автомобиль и поставить его на ремонт. Как это сделать? Если БД будут разные. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 14:48 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
NechtoСлужба по ремонту имеет свой модуль и БД совсем нет смысла делить на модули ещё и по БД. БД должна быть одна. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 15:20 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
Nechto, схемы БД можно задействовать по функциональным кускам: - Торговля - Логистика - Кадры ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 15:24 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
Petro123, Ну это если все в одной бд крутится. А если нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 15:40 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
NechtoPetro123, Ну это если все в одной бд крутится. А если нет. Тогда не взлетит. Тогда репликация между базами или переброска файлами проводок как в 1С. Оно тебе надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 15:53 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
>Nechto, сегодня, 09:31 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1279936&msg=21029440][21029440] >... Где имеется ядро программы, а модули разрабатывают несколько групп разработчиков... Я прощёл этим путем. Можно посмотреть и это . С уважением, Владимир ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 19:59 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
Petro123NechtoPetro123, Ну это если все в одной бд крутится. А если нет. Тогда не взлетит. Тогда репликация между базами или переброска файлами проводок как в 1С. Оно тебе надо? Соглашусь, не надо. Моя задача реализовать платформу, в которпой после прогрпаммисты могли накатывать свои модули. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2017, 08:08 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
Nechtoреализовать платформу, в которпой после прогрпаммисты могли накатывать свои модули. Что сие значит - загадка. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2017, 10:46 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
NechtoPetro123, Ну это если все в одной бд крутится. А если нет.Значит надо передать информацию из одной БД в другую. Это же очевидно. Вариантов это сделать множество. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 05:48 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
NechtoRoman Mejtesв проектах, что я писал, для взаимодействия между модулями, можно использовать события\делегаты, в параметрах события, делать маршрутизацию, если модули в виде дера и т.д. Я не совсем понимаю во взаимодействиях между модулями. К примеру: Транспортный отдел внес новый автомобиль в свою БД из своего модуля. -> Служба по ремонту имеет свой модуль и БД, ей нужно как-то удивить этот автомобиль и поставить его на ремонт. Как это сделать? Если БД будут разные.После такого примера возникает вопрос: а нужны ли тут модули? Может подумать над тем как организовать обмен данными между приложением транспортного отдела и приложением службы по ремонту? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 05:55 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
NechtoПри помощи этого можно обновлять в реальном времени. 3. Чтение модулей (dll) Assembly.LoadFrom(*.dll); Ошибаетесь. Загрузить-то можно одну, две, три сборки. А выгрузить только если целиком весь AppDomain. В Вашем случае это означает, что для обновления одного модуля, придётся прибить всё приложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 06:46 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
skyANANechtoПри помощи этого можно обновлять в реальном времени. 3. Чтение модулей (dll) Assembly.LoadFrom(*.dll); Ошибаетесь. Загрузить-то можно одну, две, три сборки. А выгрузить только если целиком весь AppDomain. В Вашем случае это означает, что для обновления одного модуля, придётся прибить всё приложение. Да заблуждался, что можно фоновом режиме обновлять модули. Assembly.LoadFrom, данный способ не подходит. Я нашел другой но не совсем с ним разобрался: Там говорится про загрузку и выгрузку AppDomain. Возможно обновление можно реализовать таким образом. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2017, 08:31 |
|
Разработка многомодульного приложения на C# WPF
|
|||
---|---|---|---|
#18+
NechtoskyANAпропущено... Ошибаетесь. Загрузить-то можно одну, две, три сборки. А выгрузить только если целиком весь AppDomain. В Вашем случае это означает, что для обновления одного модуля, придётся прибить всё приложение. Да заблуждался, что можно фоновом режиме обновлять модули. Assembly.LoadFrom, данный способ не подходит. Я нашел другой но не совсем с ним разобрался: Там говорится про загрузку и выгрузку AppDomain. Возможно обновление можно реализовать таким образом. междоменное взаимодействие накладывает на себя дополнительные ресурсы, а объекты которые вы будите использовать между домену нужно делать сериализуемыми. сделайте просто программу обновлятор, которая будет запускаться сразу перед закрытием основной программы при обновлении и запускать программу снова. чтоб для пользователя все было еще прозрачнее, можно сохранять текущее состояние и восстанавливать его после перезапуска ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2017, 09:53 |
|
|
start [/forum/topic.php?fid=21&msg=39569064&tid=1440458]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 239ms |
total: | 380ms |
0 / 0 |