У меня архитектурный вопрос.У меня есть проект, который концептуально что-то вроде этого:
Это кажется довольно простым, но есть морщины.Некоторый фон в виде частично вымышленного примера.Это драйвер ASCOM , который управляет некоторыми двигателями, датчиками и некоторыми выключателями питания.Аппаратное устройство может вращать купол обсерватории и сообщать о его положении, открывать и закрывать затвор и включать и выключать питание различных приборов наблюдения (телескоп, камера, фокусировщик и т. Д.).
Уровень аппаратной абстракцииимеет дело с отправкой и получением команд по последовательному каналу и с любыми проблемами синхронизации и последовательности, которые идут с этим.Уровень представления может вызывать метод в HAL, чтобы аппаратные средства выполняли какие-либо действия, которые могли бы генерировать целый ряд команд и ответов на последовательном порту или вообще не генерировать их.Нежелательные данные также могут поступать на последовательный порт и полностью обрабатываться в HAL.
«Уровень представления» состоит из нескольких COM-интерфейсов.Один интерфейс (IDome) имеет дело с управлением куполом и затвором, другой (IPower) имеет дело с управлением питанием различных устройств.Это стандарт, и его нельзя изменить.
Проблема возникает, когда две разные программы хотят получить доступ к устройству.Например, одна программа может захотеть управлять куполом через интерфейс IDome, другая может захотеть управлять питанием с помощью интерфейса IPower.В текущей реализации это приводит к тому, что в разных процессах создаются два экземпляра всей сборки, и один происходит сбой из-за конфликта на последовательном порту, который может разрешить только одно соединение.
Мне нужно найти способразъединение HAL и уровня представления, так что интерфейсы COM могут загружаться несколькими процессами, тогда как HAL загружается только один раз и обслуживает все экземпляры уровня представления.
В настоящее время все эти «уровни»содержится в одной сборке .NET, и я бы предпочел сохранить ее, если это возможно.
Какие шаблоны хороши для этой ситуации?Любые предложения приветствуются.