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

Рассмотрим два основных требования к модулю:

  1. Один из классов модуля должен быть унаследован от класса ModuleBase (библиотека MaxStoreErp.Core).
  2. Модуль необходимо располагать в директории Modules в корне приложения (именно в этой директории происходит поиск и загрузка модулей).

Класс ModuleBase обязывает реализовать у себя в классе единственное свойство, а именно ModuleName – это имя будет фигурировать при отображении прогресса загрузки оболочки, записи сбоев при загрузке, просмотре набора модулей и т.д. Называть модуль стоит исходя из его основной функциональности (например, “Справочники”, “Склад” и т.д.).

Процедура инициализации модуля выглядит следующим образом:

ModuleInit

Публикация события начала загрузки и последовательный вызов двух дальнейших этапов реализован в методе Initialize() класса ModuleBase. Хотя этот метод и является виртуальным, по возможности стоит избегать его перегрузки в классах-наследниках.

На этапе регистрации служб модуль производит размещение предоставляемых им служб в контейнере приложения (делая их общедоступными для всего приложения). Допустим, модуль Справочники может предоставлять службу IUsersService, которая реализует получение и редактирование списка пользователей системы.

Этап регистрации элементов меню будет подробно рассмотрен в другом уроке.

Теперь о том, как рекомендуется структурировать проект при разработке модулей.

image

Решение имеет три корневых каталога: Common, Modules и Shell.

В каталог Common помещаются вспомогательные проекты модулей, такие как дополнительные элементы управления, уровень доступа к данным и т.д.

В каталог Modules помещаются непосредственно сами модули.

В директорию Shell подключаются проекты оболочки.

Рассмотрим структуру модуля DirectoriesModule, представленного на картинке. Он содержит класс с наименованием, совпадающим с наименованием модуля – это класс-наследник ModuleBase (о котором рассказывалось выше).

Папка Resources содержит ресурсы, необходимые этому модулю.

Папка StoragePlace представляет из себя логически выделенную функциональность (в данном примере функциональность управления местами хранения). При разработке таких частей используется паттерн MVPVM. Кто не знаком с ним, посетите этот ресурс. Для простоты совокупность файлов этой папки мы будем называть “Функциональная единица”.

Физическое содержимое папки StoragePlace:

  1. StoragePlaceViewModel – класс-наследник ViewModelBase. Является поставщиком данных для представления.
  2. StoragePlaceView – непосредственно само представление, реализующее интерфейс IView.
  3. StoragePlacePresenter – класс, содержащий логику функциональной единицы. Наследуется от класса PresenterBase.

Все указанные базовые классы содержаться в сборке MaxStoreErp.Core.

И напоследок: для разрабатываемого проекта следует создавать новую конфигурацию построения, в которой все файлы разрабатываемого приложения будут строиться в одну директорию, а модули будут помещаться в директорию Modules. В дальнейшем это облегчит Вам разработку и отладку Улыбка

Last edited Jan 27, 2014 at 8:14 AM by Maxxtor, version 2