Добрый день!
Уважаемые коллеги, прошу консультации в вопросе организации архитектуры комплекса систем.
Для примера, есть три системы (на деле систем может быть десяток):
1. Система управления складом (SecondApplication)
2. Система управления клиентами (FirstApplication)
3. Система управления и настройки (MainApplication)
Система управления и настройки (MainApplication) - служит для задания иерархии подразделений в организации, списка сотрудников, установки им разных прав доступа в разных системах (FirstApplication, SecondApplication), собирает агрегированную информацию и других систем. Т.е. с одной стороны служит виртуальным рабочим пространством для каждого сотрудника, а с другой стороны это "единый пульт управления" для администраторов и руководителей.
Каждая из систем состоит, на данный момент, из трех уровней Data Access Layer, Bussines Logic Layer, и Presentation Layer.
База данных на данный момент одна, для всех систем, но должны быть возможность разместить таблицы каждой системы в разных БД, на разных серверах.
В MainApplication присутствуют такие сервисы, как
- PositionService (с CRUD методами) - сервис отвевчающий за должности;
- DepartmentService (с CRUD методами) - сервис отвечающий за отделы;
- SystemRoleService (с CRUD методами) - сервис отвечающий за роли в системах;
и т.п.
Конечно в какой-то момент в приложениях FirstApplication и SecondApplication понадобилось получить, например, все должности текущего пользователя, т.е. в теории - воспользоваться методами PositionService из BLL системы MainApplication. На данный момент это сделано дублированием сервиса и сущностей в BLL и DAL FirstApplication и SecondApplication, что конечно же не правильно, так как в случае изменения сущности Position (должность к примеру) или изменению метода GetPositionsByUserId, нужно менять его в трех местах - MainApplication, FirstApplication, SecondApplication.
Потребность вызова "общих функций" стала расти в разных системах, все стало пухнуть и стало понятно, что дублирование методов до хорошего не доведет.
Как выход из этой ситуации - веб сервисы на основе wcf, или ASP.NET WEB API. Прочитав информацию о wcf, все равно осталось много белых пятен и ряд вопросов:
- намного ли медленнее будет работать подход с wcf сервисами, чем текущей подход (дублированием)?
- если в примере используется несколько сервисов-классов PositionService, DepartmentService, RoleService и т.п, это будут отдельные wcf-сервисы?
- какие слои получаются для каждой системы: DAL <-> BLL <-> WCF <-> ASP.NET MVC ?
Огромная просьба проконсультировать в этом вопросе, возможно я смотрю не на те подходы (WCF, API).
Как грамотно организовать взаимодействие между несколькими системами в комплексе систем?
Заранее благодарю за любую помощь!