Друзья, нужны советы в проектировании архитектуры ПО, чтоб потом не было мучительно больно.
Программа, которая управляет стендом для тестирование некоторых железок.
Подсистемы планируются примерно такие:
- Печать этикеток
- Управление стендом по ModBus
- Запрос серийного номера с сервера
- Отправка отчета на сервер
- Логирование исключительных ситуаций
- Логирование хода теста
- Графическое отображение хода теста
- Сам тест
Для удобства работы думаю использовать паттерн "Фасад", не знаю впишется или нет.
Самая важная часть это тест оборудования, который может состоять из многих подтестов. Думаю сделать интерфейс типа ITest:
interface ITest
{
void Run();
Result Result();
}
И реализовывать его в классах подтестов.
Устройств много, для того или иного устройства нужно использовать разные подтесты. При чем включать/отключать подтесты нужно без изменения кода. Думаю может описать интерфейс:
interface IDeviceForTest
{
bool SelfTest {get; set;}
bool PowerTest {get; set;}
...
void Test();
}
Потом реализовать интерфейс
class Device1 : IDeviceForTest
{
public bool SelfTest {get; set;} = true;
public bool PowerTest {get; set;} = true;
public void Test()
{
if (SelfTest)
{
var selftest = new SelfTest();
selftest.Run();
}
...
}
}
Сериализовать объекты устройств в json и во время запуска восстанавливать объект с возможными правками (вкл/откл) json-файла подтеста.
В общем неуклюже И не очень понятно, как лучше получать результат теста, чтобы логику обработки результата не делать в классе устройства. Тестирование всего устройства нужно останавливать, если какой-то подтест не пройден. Что посоветуете?