Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Разработка многомодульного приложения на C# WPF  [new]
Nechto
Member

Откуда:
Сообщений: 825
Помогите пожалуйста определиться в концепции разработки многомодульных приложений? Где имеется ядро программы, а модули разрабатывают несколько групп разработчиков.
Ниже описал примерно как я это вижу. Хотелось бы услышать мнение тех, кто уже занимался подобными проектами.

Основные критерии к разработки:
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 дек 17, 09:31    [21029440]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Nechto,
зайди в ветку ERP и напиши тут, прототип какого ERP ты пишешь?
13 дек 17, 10:35    [21029644]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4030
в C# сделать обновление в фоновом режиме UI модулей, это как мне кажется нереальная хрен.
если обычный модуль\DLL можно загрузить в левый домен и потом выгрузить и обновить, то для UI Контролов вам нужно грузить файлв в домен приложения и выгрузить после этого его уже будет нельзя. А если нельзя выгрузить,то и обновить будет мало реально.
модульность делается легко
загружаете DLL, находите в ней все классы наследующие интерфейс ISomeOne, запоминаете, потом создаете на основе типов инстансы
13 дек 17, 11:08    [21029758]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Nechto
Member

Откуда:
Сообщений: 825
Да структура проекта ERP.
Мне нужно, для несколько отделов создать одну платформу. У каждого отдела будут свои модули(dll). Базы данных, скорее всего тоже будут разные. Отделы взаимодействуют между собой, поэтому должна быть какие-то связи, между модулями.

При помощи этого можно обновлять в реальном времени.
3. Чтение модулей (dll) Assembly.LoadFrom(*.dll);


Roman Mejtes
модульность делается легко
загружаете DLL, находите в ней все классы наследующие интерфейс ISomeOne, запоминаете, потом создаете на основе типов инстансы

С этим согласен

А как реализовать работу с базой данных? EF я так понимаю не подходит для ERP проектов? Так как, EF создает модель только один раз при старте проекта(ядра)
13 дек 17, 12:26    [21030179]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4030
Nechto
Да структура проекта ERP.
Мне нужно, для несколько отделов создать одну платформу. У каждого отдела будут свои модули(dll). Базы данных, скорее всего тоже будут разные. Отделы взаимодействуют между собой, поэтому должна быть какие-то связи, между модулями.

При помощи этого можно обновлять в реальном времени.
3. Чтение модулей (dll) Assembly.LoadFrom(*.dll);


Roman Mejtes
модульность делается легко
загружаете DLL, находите в ней все классы наследующие интерфейс ISomeOne, запоминаете, потом создаете на основе типов инстансы

С этим согласен

А как реализовать работу с базой данных? EF я так понимаю не подходит для ERP проектов? Так как, EF создает модель только один раз при старте проекта(ядра)

ну как мне кажется, это нужно либо отдать на откуп модулю, то есть в каждом модуле работа с БД организована своя, тем более вы пишите, что у каждого модуля своя база.
Тут вполне подходит антипаттерн локатора служб. Подключая модуль вы подключаете набор служб зная заранее контракт каждой из них, то есть процесс взаимодействия вы спроектируйте на этапе архитектурной разработки. Нужно просто продумать все интерфейсы, сделать локатор и штамповать сервисы.
можно сделать отдельный сервис для работы с базами данных.
в проектах, что я писал, для взаимодействия между модулями, можно использовать события\делегаты, в параметрах события, делать маршрутизацию, если модули в виде дера и т.д.
13 дек 17, 12:32    [21030198]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Nechto
Да структура проекта ERP.

ещё раз.
"Врага нужно знать в лицо".
Имя сестра, имя!!!
Какую систему копируем?

Nechto
А как реализовать работу с базой данных? EF я так понимаю не подходит для ERP проектов? Так как, EF создает модель только один раз при старте проекта(ядра)

если копируем 1С, то там ядро стартует при старте конфигурации.
Т.е. есть Модель ядра и есть модель бизнеса-предметки.
Время разработки от 5 человеко-лет.
IMHO
13 дек 17, 12:54    [21030272]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Nechto
Member

Откуда:
Сообщений: 825
Roman Mejtes
Подключая модуль вы подключаете набор служб зная заранее контракт каждой из них, то есть процесс взаимодействия вы спроектируйте на этапе архитектурной разработки. Нужно просто продумать все интерфейсы, сделать локатор и штамповать сервисы.


Roman Mejtes
можно сделать отдельный сервис для работы с базами данных. в проектах, что я писал, для взаимодействия между модулями, можно использовать события\делегаты, в параметрах события, делать маршрутизацию, если модули в виде дера и т.д.


Выделил жирным что я не понял:
- под службами вы что имели ввиду?
- локатор это какое-то расширение?

А общие справочника как вы реализовывали, которые могут использоваться в нескольких модулях?
13 дек 17, 13:04    [21030310]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Nechto
Member

Откуда:
Сообщений: 825
Petro123
Nechto
Да структура проекта ERP.

ещё раз.
"Врага нужно знать в лицо".
Имя сестра, имя!!!
Какую систему копируем?

Nechto
А как реализовать работу с базой данных? EF я так понимаю не подходит для ERP проектов? Так как, EF создает модель только один раз при старте проекта(ядра)

если копируем 1С, то там ядро стартует при старте конфигурации.
Т.е. есть Модель ядра и есть модель бизнеса-предметки.
Время разработки от 5 человеко-лет.
IMHO


Мне понравилось как это сделано, в Sap Logon. Но интерфейс там не дружелюбный и навигация не совсем удобна.
За основу взял её иерархию TreeView, там грамотно разложено все по отделам и видами работ.
13 дек 17, 13:12    [21030355]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Nechto
Мне понравилось как это сделано, в Sap

не слишком круто для подражания?
13 дек 17, 13:21    [21030377]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Nechto
Member

Откуда:
Сообщений: 825
Petro123
Nechto
Мне понравилось как это сделано, в Sap

не слишком круто для подражания?


Я же её не переписывать собираюсь :) а говорю что мне в ней понравилось.
13 дек 17, 13:41    [21030460]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Nechto
Я же её не переписывать собираюсь :) а говорю что мне в ней понравилось.

угу. Смотрел на королеву, а женился на кухарке)
13 дек 17, 14:11    [21030573]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Nechto
Member

Откуда:
Сообщений: 825
Roman Mejtes
в проектах, что я писал, для взаимодействия между модулями, можно использовать события\делегаты, в параметрах события, делать маршрутизацию, если модули в виде дера и т.д.


Я не совсем понимаю во взаимодействиях между модулями.
К примеру:

Транспортный отдел внес новый автомобиль в свою БД из своего модуля. -> Служба по ремонту имеет свой модуль и БД, ей нужно как-то удивить этот автомобиль и поставить его на ремонт.
Как это сделать? Если БД будут разные.
13 дек 17, 14:48    [21030771]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Nechto
Служба по ремонту имеет свой модуль и БД

совсем нет смысла делить на модули ещё и по БД.
БД должна быть одна.
13 дек 17, 15:20    [21030958]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Nechto,
схемы БД можно задействовать по функциональным кускам:
- Торговля
- Логистика
- Кадры
13 дек 17, 15:24    [21030982]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Nechto
Member

Откуда:
Сообщений: 825
Petro123,

Ну это если все в одной бд крутится. А если нет.
13 дек 17, 15:40    [21031064]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Nechto
Petro123,

Ну это если все в одной бд крутится. А если нет.

Тогда не взлетит.
Тогда репликация между базами или переброска файлами проводок как в 1С.
Оно тебе надо?
13 дек 17, 15:53    [21031098]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 2420
>Nechto, сегодня, 09:31 [21029440]
>... Где имеется ядро программы, а модули разрабатывают несколько групп разработчиков...

Я прощёл этим путем.
Можно посмотреть и это.

С уважением,
Владимир
13 дек 17, 19:59    [21031918]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Nechto
Member

Откуда:
Сообщений: 825
Petro123
Nechto
Petro123,

Ну это если все в одной бд крутится. А если нет.

Тогда не взлетит.
Тогда репликация между базами или переброска файлами проводок как в 1С.
Оно тебе надо?


Соглашусь, не надо. Моя задача реализовать платформу, в которпой после прогрпаммисты могли накатывать свои модули.
14 дек 17, 08:08    [21032522]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Nechto
реализовать платформу, в которпой после прогрпаммисты могли накатывать свои модули.

Что сие значит - загадка.
14 дек 17, 10:46    [21032871]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28127
Nechto
Petro123,

Ну это если все в одной бд крутится. А если нет.
Значит надо передать информацию из одной БД в другую.
Это же очевидно.

Вариантов это сделать множество.
20 дек 17, 05:48    [21047445]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28127
Nechto
Roman Mejtes
в проектах, что я писал, для взаимодействия между модулями, можно использовать события\делегаты, в параметрах события, делать маршрутизацию, если модули в виде дера и т.д.


Я не совсем понимаю во взаимодействиях между модулями.
К примеру:

Транспортный отдел внес новый автомобиль в свою БД из своего модуля. -> Служба по ремонту имеет свой модуль и БД, ей нужно как-то удивить этот автомобиль и поставить его на ремонт.
Как это сделать? Если БД будут разные.
После такого примера возникает вопрос: а нужны ли тут модули? Может подумать над тем как организовать обмен данными между приложением транспортного отдела и приложением службы по ремонту?
20 дек 17, 05:55    [21047447]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28127
Nechto
При помощи этого можно обновлять в реальном времени.
3. Чтение модулей (dll) Assembly.LoadFrom(*.dll);

Ошибаетесь.

Загрузить-то можно одну, две, три сборки. А выгрузить только если целиком весь AppDomain.
В Вашем случае это означает, что для обновления одного модуля, придётся прибить всё приложение.
20 дек 17, 06:46    [21047460]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Nechto
Member

Откуда:
Сообщений: 825
skyANA
Nechto
При помощи этого можно обновлять в реальном времени.
3. Чтение модулей (dll) Assembly.LoadFrom(*.dll);

Ошибаетесь.

Загрузить-то можно одну, две, три сборки. А выгрузить только если целиком весь AppDomain.
В Вашем случае это означает, что для обновления одного модуля, придётся прибить всё приложение.


Да заблуждался, что можно фоновом режиме обновлять модули. Assembly.LoadFrom, данный способ не подходит.
Я нашел другой но не совсем с ним разобрался:
+
https://stackoverflow.com/questions/6258160/unloading-the-assembly-loaded-with-assembly-loadfrom/6259172#6259172


Там говорится про загрузку и выгрузку AppDomain. Возможно обновление можно реализовать таким образом.
21 дек 17, 08:31    [21050709]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4030
Nechto
skyANA
пропущено...

Ошибаетесь.

Загрузить-то можно одну, две, три сборки. А выгрузить только если целиком весь AppDomain.
В Вашем случае это означает, что для обновления одного модуля, придётся прибить всё приложение.


Да заблуждался, что можно фоновом режиме обновлять модули. Assembly.LoadFrom, данный способ не подходит.
Я нашел другой но не совсем с ним разобрался:
+
https://stackoverflow.com/questions/6258160/unloading-the-assembly-loaded-with-assembly-loadfrom/6259172#6259172


Там говорится про загрузку и выгрузку AppDomain. Возможно обновление можно реализовать таким образом.

междоменное взаимодействие накладывает на себя дополнительные ресурсы, а объекты которые вы будите использовать между домену нужно делать сериализуемыми. сделайте просто программу обновлятор, которая будет запускаться сразу перед закрытием основной программы при обновлении и запускать программу снова.
чтоб для пользователя все было еще прозрачнее, можно сохранять текущее состояние и восстанавливать его после перезапуска
21 дек 17, 09:53    [21050813]     Ответить | Цитировать Сообщить модератору
 Re: Разработка многомодульного приложения на C# WPF  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Roman Mejtes
сделайте просто программу обновлятор,

+1
21 дек 17, 10:36    [21050902]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить