質問: temporary; //データをいったん保存 break; } } ``` このコード(前回質問させていただいた時の教えていただいたコードなのですが...)を 使い回しのきくクラスとメインの今回のアプリで使うクラスに分けるには、 どのようにすればいいのでしょうか? 気をつける点やポイント等教えていただきたいです。 長くなりましたがよろしくお願いいたします。 [++C++;//未確認飛行C] http://ufcpp.net/study/csharp/oo_class.html こちらのサイトも参考にさせていただいたのですが自分の知識がついてこず.. いまいちピンと来てくれませんでした :(
回答: a. コードで気になった点。 1, 受信処理の解析と思われる部分に変数名:Sendbuffaがあるのが気になります。 送受信データの混在を避けるため送信バッファ/受信バッファの変数は分けると思いますが、単純に変数名の命名がそうなっていただけでしょうか? ``` var temporary = Sendbuffa + recData; ``` 2,`temporary.IndexOf`と`temporary.Split`を同時に行っているのが気になります。 `while`ループからforループに変換して、以下のコードでも。 ``` var temporary = Sendbuffa + recData; var lines = temporary.Split(new[] { Environment.NewLine }, StringSplitOptions.None ); for (int i=0; i< lines.Length - 1; i++) { logText(lines[i], ComPort); } Sendbuffa = lines.Last(); ``` 3,デミリタ(区切り文字)にEnvironment.NewLineを使っている点 参考 ->environment.newline.aspx) > > UNIX 以外のプラットフォームでは "\r\n" を含む文字列。UNIX プラットフォームでは "\n" を含む文字列。 > > > Unixプラットフォームではenvironment.newlineの改行コードが違うため、このプログラムをUnixで動かした時に注意が必要です。 b. クラス分けについて `SerialPortServer`クラスを新規作成して、2)と3)の処理を行います。 4)はクラスを作らずに`Action`を`SerialPortServer`クラスに定義します。 参考 -> Action デリゲート.aspx) ``` public Action logWrite; ``` 呼び出し方 `logWrite(lines[0]);` 画面を更新する必要がある時は、`Action`イベント内で`コントロール名.Dispatcher.BeginInvoke();`を呼び出すのをお忘れなく。 最後に通信に関わる部分は通信プロトコル解析処理(`Parser`)がどうしても必要になるので、使い回しはしずらいと思いますー。 自作せずに`HTTP`などのプロトコルを上に被せる形がいいのではと。 どうしても自作するなら、状態遷移図と通信プロトコルのドキュメントは最初に作成するほうが後々苦労しないです。