0

私は自分のアプリケーションをMVVMパターンに移植しており、ビューの背後にあるコードから独自のmodelクラスにコードを移動することから始めました。

私が行った最初のステップは、デバイスのネットワーク コードhttps://www.thalmic.com/en/myo/を MyoDevice クラスに移動することです。

元のコードは、ビューのコード ビハインドですべてのネットワーク コードをホストしていましたが、これは悪い習慣であると言われています。

Visual Studio で「Extract to Method」ツールを使用しようとしましたが、エラーが発生し続けます。"The selected text is not inside a method"

この接続コードと切断コードを 2 つの別々の方法に抽出する方法を知っている人はいますか?

デバイス接続コードを独自のモデルに移動する前のクラスは、もともと次のようになっていました。

http://hastebin.com/gepudayele.cs

これは、MyoDevice モデルに配置された後のコードです。

http://hastebin.com/ocogoseziy.cs

たとえば、接続と切断のコードは、デバイスが接続/接続を失ったときにデバイスをリッスンします。

// create a hub that will manage Myo devices for us
        channel = Channel.Create(ChannelDriver.Create(ChannelBridge.Create()));
        hub = Hub.Create(channel);
        {

            // listen for when the Myo connects
            hub.MyoConnected += (sender, e) =>
            {

                this.Dispatcher.Invoke((Action)(() =>
                {
                    statusTbx.Text = "Myo has connected! " + e.Myo.Handle;
                    e.Myo.Vibrate(VibrationType.Short);

                    // unlock the Myo so that it doesn't keep locking between our poses
                    e.Myo.Unlock(UnlockType.Hold);

                    e.Myo.PoseChanged += Myo_PoseChanged;

                    e.Myo.OrientationDataAcquired += Myo_OrientationDataAcquired;



                }));
            };

            // listen for when the Myo disconnects
            hub.MyoDisconnected += (sender, e) =>
            {
                this.Dispatcher.Invoke((Action)(() =>
                {
                    statusTbx.Text = "Myo has disconnected!";
                    e.Myo.Vibrate(VibrationType.Medium);
                    e.Myo.OrientationDataAcquired -= Myo_OrientationDataAcquired;
                    e.Myo.PoseChanged -= Myo_PoseChanged;


                }));
            };

            // start listening for Myo data
            channel.StartListening();
        }
4

1 に答える 1

2

あなたがしていることに特別なことは何もありません。自動化されたツールが機能するはずです。しかし、ツールは壊れるので、うまくいかない場合は手動で行います。

コードをメソッドにリファクタリングする手順は非常に簡単です。

  1. メソッドを宣言します。明らかな戻り値の型がない場合は、とりあえず使用voidしてください。パラメータはまだありません。
  2. 古いコードからリファクタリングするコードをこのメソッドにカットアンドペーストします
  3. すぐに初期化される (ただし宣言されない) 変数はすべて、メソッド内で宣言します。
  4. 単に使用されているが、明らかにメソッドによって設定/初期化されていない変数は、パラメーターにする必要があります
  5. 戻り値が必要であることがわかった場合は、それを追加します。
  6. 建てる!
  7. 見逃したものを発見し、必要に応じてパラメーターを宣言または追加します (上記のガイドラインに従います)。
  8. セクションが削除された元のコードで、代わりにこのメソッドを呼び出します。

明らかに、これは経験によって容易になります。できる限りこれを実践することを強くお勧めします。また、自動リファクタリング ツールが何をしているのかを理解するまでは、自動リファクタリング ツールの使用を控えることを強くお勧めします。ツールが壊れます。人々はそうしません(少なくとも同じ方法ではありません)。

于 2015-02-03T18:43:35.667 に答える