Данный модуль является частью приложения "Юнит-сервис". ПО предназначено для обеспечения взаимодействия пользователя с устройствами семейства "ЮНИТ" в части параметрирования, чтения технологической информации, обеспечения учета устройств и мониторинга параметров их работы. "Юнит-сервис" является модульным приложением и включает в себя 31 модуль. Представленный модуль является одним из них. Надо отметить, что предыдущая реализация приложения была монолитной, с одним проектом включающий в себя все модули. Лично мною было предложено выделить каждый модуль в свой проект, сделать их независимыми как друг от друга так и от основного приложения и конкретных физических изделий. Это дает ряд преимуществ наряду с более легкой поддержкой, наприимер это дало мне возможность создать отдельную утилиту тестирования модулей, который позволяет запускать и тестировать модуль не подключаясь к конкретному физ. устройству и к БД основного приложения, что в условиях пандемии оказалось очень кстати. Также это дает возможность легко использовать данный модуль в контексте других приложений, в частности это позволило мне выложить рабочий модуль отдельно в GitHub. При условии что на билд-машине установлен DevExpress можно собрать решение и запустить утилиту ModuleTestApp для ознакомления с модулем на тестовых данных.
Назначение программного модуля - создание и корректировка логических связей между сигналами ФСУ и сигналами, формируемыми на аппаратных интерфейсах устройства (дискретные входа, реле) и сигналами цифровых входов. В свою очередь состояния цифровых входов определяются значениями сигналов в GOOSE сообщениях, на которые устройство подписано.
Проект Common. Содержит в себе сущности и ресурсы общие для всех проектов решения "Юнит-сервис". Legacy, напиисан не мною, можно не смотреть.
Содержат в себе корпоративные стили. Legacy, напиисан не мною, предпологается постепенно все перенести в кастомный DevExpress тему.
Кастомная DevExpress тема, содержащая корпоративные стили и ресурсы. Создан мною, предпологается перенести все стили и ресурсы с Unitel styles именно сюда, пока перенесено далеко не все.
Проект модуля редактора матрицы. Написан полностью мною. Стоит отметить, что Domain Layer не выделен полностью, и значительная часть его логики сконцентрирована во VM. Это наверно не есть хорошо, но учитывая сложность модуля, предпологаемую частоту изменения модуля, уровень профессионализм персонала, которым потенциально придется вносить изменения, а также ограниченность человеческих и временных ресурсов, я счел это вполне допустимым. Также можно отметить отсутствие комментарий к коду, это не означает игнорирование с моей стороны каких то правил, а только недостаток временных ресурсов, а так старался писать код максимально понятным без комментариев. По той же причине отсутсвуют юнит тесты, на другом продукте использовал юнит тесты, но это очень здорово отнимает врмени и сил, в идеале наверно нужен отдельный человек занимающийся тестами, поэтому от тестов тоже прищлось отказаться.
Проект для запуска и тестирования модулей. Надо отметить что не выделен общий интерфейс модулей который содержал бы такие общие вещи как инициализация/деинициализация модуля, отсюда странные участки кода для вызова деинициализации, этого пока нет. Сохранение/чтение матрицы происходит на файл, не на изделие или БД проекта, в основном проекте приложения имеются соответствующие реализации интерфейсов для изделия и БД, соответственно там матрицы записываются на физ. устройство и БД.