заменить / отключить компоненты управления для разработки / тестирования - PullRequest
1 голос
/ 02 февраля 2012

У меня есть форма VB, которая содержит элементы управления для взаимодействия с некоторыми аппаратными средствами (видеокамерами, двигателями и т. Д.) На компьютере, на котором она должна быть развернута, но обычно я не нахожусь в месте расположения указанного компьютера (это 3час езды)Я пытаюсь работать над проектом на своем ноутбуке, но очевидно, что элементы управления будут генерировать всевозможные ошибки, поскольку они не могут общаться с оборудованием.

Я думал о замене типов управления моими собственными классами управления имитацией, а затем использовал директивы #if, чтобы контролировать, собираю ли я для реальной машины или моей тестовой машины.Проблема в том, что часть затронутого кода находится в разделе кода, сгенерированного дизайнером формы;дизайнер форм автоматически пытается «исправить» мои изменения, поэтому мне придется все время вручную возвращать их назад и стараться не помнить, чтобы изменения в конструкторе форм не передавались в систему управления версиями.

Любые предложения покак я могу обойти эту проблему, или, возможно, другой подход, чтобы я (и мои коллеги) могли работать, находясь вдали от сайта?

Я работаю в VB2005.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

Все, что вам нужно, это использовать шаблон Inversion Of Control. Это шаблон, в котором вы создаете интерфейсы для определения методов, необходимых классу, а затем вы можете создать два (или более) объекта: «реальный» или макет.

Подробнее здесь

0 голосов
/ 02 февраля 2012

Вы можете использовать интерфейс для решения этой проблемы. Предположим, IHardware - это интерфейс, задайте все функции, которые вам требуются от видеокамеры и т. Д. Здесь. Теперь реализуйте этот интерфейс в отдельной библиотеке классов. Эта библиотека будет обрабатывать все вызовы вашего аппаратного кода. Скажи, что это WorkLibrary. Теперь в форме вы будете использовать этот интерфейс для совершения звонков на ваш WorkLibrary.

Интерфейс

interface IHardware
{
    void Load(); //Example
}

Библиотека классов

class WorkClass : IHardware
{
    public void Load()
    {
    }
}

Внутри вашей формы, для вызова Load метода, вы сделаете

//Fully Qualified name of the WorkClass, you can store this in config file also
string provider = "WorkLibrary.WorkClass, WorkLibrary";
IHardware hardWare = Activator.CreateInstance(Type.GetType(provider, true));
hardWare.Load();

При таком подходе вам не нужно ссылаться на WorkLibrary.dll в вашем проекте формы, вам просто нужно поместить его в папку debug или release.

Таким образом, вы можете полностью отделить ваши аппаратные вещи.

Большим преимуществом этого может быть

  • Вы можете написать разные библиотеки для разного оборудования.
  • Вы можете протестировать эти библиотеки независимо от потребителя.

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...