0

私は、最下層が入出力通信デバイス(シリアルポートなど)で構成されているアプリケーションに取り組んでいます。

最小限の労力でより価値のあるツールを実現するには、隣接するレイヤーが通信媒体 (イーサネットや USB など) の変化の影響を受けないようにする必要があります。これは、私が間違っていなければ、依存性逆転原則の使用などを主張しています。私は例を見てきました。

class DataIOClient
{   
public:
DataIOClient(void){}
~DataIOClient(void){}

virtual void WriteData(DataIOClientData* data) = 0;
virtual void ReadData(DataIOClientData* data) = 0;
};

このインターフェイスは、対応する実装 (選択した通信アーキテクチャによって異なります) と共に、上位層を通信層から分離する必要があります。

ただし、初期化の問題に遭遇しました。各アーキテクチャは異なる初期化パラメータ (たとえば、COMPort では 9600 8N1、イーサネットでは 192.168.1.2、パラレル ポート通信では LPT1) を要求するため、それを実現するための依存スキームや基礎となる抽象化を理解できません。

DataIOClient が実装が要求する入力パラメーターを先験的に「知っていた」場合、それは結合され、依存関係の反転はもうありません。正しいですか? この原則の適切な適用を正しく理解していないという漠然とした感覚があります。

ありがとう

4

1 に答える 1

2

パラメータとともにテキスト構成ファイルが機能するように思えます。構成を解析し、適切なファクトリ関数を呼び出します。

.config:

IOClient = { type = "ethernet", config = { host = "12.34.56.78", port = "8080" } }

IOClient = { type = "usb", config = { } }

IOClient = { type = "serial", config = { device = "/dev/modem" } }

クリエーター.cc:

item = read_tuple("IOClient");

std::unique_ptr<DataIOClient> = factory.create(item["type"], item["config"]);
于 2013-06-10T12:46:32.647 に答える