Как лучше спроектировать в данном примере классы? Есть устройства контроллеры - Controllers, у них одинаковые наборы атрибутов. Но они могут быть разных производителей и в зависимости от производителей разные возможности и функции. Пока у меня класс
Controller: Id Name Address DeviceId - по этому ID можно будет достать техн характеристики данного типа устройства, напр производителя.
Этот класс я планирую посредством orm хранить в таблице Controllers.
Дальше я хочу поместить функции для работы с контроллерами, они должны быть сгруппированы по производителям.
В голове у меня создать по классу на производителя наследующих Controller. Например :
ControllerVendor1 : Controller setData()
ControllerVendor2 : Controller setData()
Хоть название функций одно и тоже, код будет отличатся.
Далее мне нужно, при получении из базы, получать контроллер нужного типа. Для этого я думаю в методе Controller.get() - проверять, по deviceId производителя и в зависимости от него создавать уже нужный контроллер и return его. return new ControllerVendor1(controller)
Насколько это нормальное решение, и как правильнее это сделать?
Язык C#;
в Device отображает возможности модели устройства.
Device: Id ModelName Vendor WorkModes
Пример из жизни: Допустим у нас есть два производителя контроллеров Vendor1 и Vendor2, мы купили 2 штуки первого и 1 штуку второго, назвали их ctr1, ctr2, ctr3.
Тогда Devices: { {id: 1, vendor: "Vendor1"}, {id: 2, vendor: "Vendor2"} }
Controllers { {id: 1, name: "ctr1", deviceId: 1}, { id: 2, name: "ctr2", deviceId: 1}, { id:3, name: "ctr3", deviceId: 2} }
P.S Device собираюсь хранить не в базе, а где то зашито в коде будет.

21 Авг 2019 в 07:02
378 +3
0
Ответы
1

В данном случае, для оптимальной организации классов, вам можно воспользоватсья паттерном проектирования "Фабрика" (Factory).

Создайте интерфейс IController с методами, общими для всех контроллеров, например, setData(). Затем создайте классы-наследники, реализующие этот интерфейс, например, ControllerVendor1 и ControllerVendor2, и определите в них уникальную логику для производителей.

Далее создайте класс фабрики ControllerFactory, в котором будет метод getControllerByVendor(string vendor), который будет возвращать объект нужного контроллера в зависимости от переданного производителя.

При загрузке контроллера из базы в методе Controller.get() вы можете использовать этот метод фабрики, чтобы вернуть нужный контроллер для управления устройством конкретного производителя.

Таким образом, у вас будут разделены классы устройств, фабрика для создания контроллеров, и классы контроллеров с уникальной логикой для каждого производителя. Это позволит вам легко добавлять новых производителей и контроллеры в будущем.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 91 947 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир