私のプログラムの一部を設計する際に問題があります。これは小説を書くことなく説明するのは難しいですから、私は試してみましょう。Interface C#のレイアウト方法が正しい
基本的には、ハードウェアからパラメータを読み書きするプログラムがあります。現在、シリアル経由ではそうですが、最終的にFTDIチップ用の.NETラッパーを使用してUSB上で実行したいと考えています。http://www.ftdichip.com/Projects/CodeExamples/CSharp.htm
私の問題は、私はいくつかの抽象化層しかし、私はどこに線を引くべきかわからない。まず、ReadParam()
、WriteParam()
、SendCommand()
の機能を私のメインフォームクラスに入れないようにします。それはただひっくり返っているようだ。だから明らかに彼らは私がインスタンス化するいくつかの他のクラスに入るはずです。その場合はComm
としましょう。
最初のオプションは、インターフェイスを作ってIComm
と言うことができ、シリアルとUSBの両方の味を実装することです。これは、ReadReplyData()
という特別な機能とGUIに返す前にシリアルデータの前処理を行う機能があるため、コードの大部分が両方のフレーバで複製されるという問題があります。
したがって、次のオプションは、インタフェースであるICommDriver
を定義する中間クラスです。 Comm
は、ReadParam()
、WriteParam()
、およびSendCommand()
の各関数と同様に、ReadReplyData()
専用の書式化関数を実装します。一方、ICommDriver
は、より簡単なRead
およびWrite
関数を指定します。
これは2つのねじれを除いてすべて些細なようです。 1つは、私はこれは、明らかに、GUIがハングアップしないので、複数のtheadedしたい。だから私はComm
はすべての読み取り/書き込みを行うにはBackgroundWorker
を使用すると考えています。またシリアルフレーバーには、USBフレーバーは表示されませんが、どのCOMポートを(GUIドロップダウンから)開くかを指定する必要があります。それでは、私はその部分をインターフェースの一部にするのかどうか?
あなたのお手伝いをしてくれてありがとう、私はこれを行う正しい方法を理解しようと数日間コードを書いている/削除しています!あなたが必要とするインタフェースの正確な種類に
ジョナサンに関しては
私は既にソフトウェアを機能させていますが、私はリファクタリングとコードのクリーンアップを試みています。私が言及したように、私は私の 'ReadParam()'と 'WriteParam()'関数を私のMainFormクラスに持つことは嫌いです。 2つのフレーバーは、基本的には.NET SerialPortクラスとFTDIのFTD2XX_NETクラスのラッパーです。だから彼らは彼らが呼んでいる基本的な機能を除いて、ほとんど同じです。 –
@Jonathon共有機能を実装する抽象クラスで何が問題になっていますか? –
その共有コードの問題がある場合、その実装に同意します。 –