У меня проблема с проектированием части моей программы (на этот раз не пишу!). Это сложно объяснить без написания романа, поэтому я постараюсь быть кратким.
По сути, у меня есть программа, которая читает / записывает параметры с аппаратного обеспечения. В настоящее время это происходит по последовательному интерфейсу, но в конечном итоге я буду делать это по USB, используя оболочку .NET для чипа FTDI http://www.ftdichip.com/Projects/CodeExamples/CSharp.htm
.
Я думаю, что моя проблема в том, что я хочу несколько уровней абстракции, но я не могу понять, где рисовать линии. Во-первых, я не хочу, чтобы мои функции ReadParam()
, WriteParam()
и SendCommand()
находились в моем основном классе формы. Это просто кажется мощеным. Очевидно, что они должны быть в каком-то другом классе, который я создам. Давайте назовем это Comm
сейчас.
Во-первых, я мог бы создать интерфейс, скажем, IComm
, и мой Serial и USB оба варианта реализуют это. Проблема в том, что большой процент кода будет дублироваться в обоих вариантах, потому что у меня есть специальные ReadReplyData()
и другие функции, которые выполняют предварительную обработку последовательных данных, прежде чем они возвращают их в графический интерфейс.
Итак, следующая опция - это иметь класс Comm как промежуточный класс, который определяет интерфейс ICommDriver
. Comm
будет реализовывать частную функцию ReadReplyData()
форматирования, а также публичные функции ReadParam()
, WriteParam()
и SendCommand()
, в то время как ICommDriver
будет определять только более простые функции Read
и Write
.
Все это кажется тривиальным, за исключением двух поворотов. Во-первых, я хочу, чтобы это было многопоточным, очевидно, чтобы графический интерфейс не зависал. Поэтому я думаю, что Comm
будет использовать BackgroundWorker
для всех операций чтения / записи. Кроме того, вариант Serial должен указывать, какой COM-порт открыть (из выпадающего меню), в то время как вариант USB - нет. Так я делаю эту часть интерфейса или нет?
Спасибо всем за помощь, я пишу / удаляю код в течение нескольких дней, пытаясь найти правильный способ сделать это!
Джонатон