0

我正在将我的应用程序移植到一个MVVM模式中,并首先将代码从我的视图后面的代码移动到它自己的model类中。

我采取的第一步是将设备的网络代码https://www.thalmic.com/en/myo/移动到 MyoDevice 类。

原始代码在后面的代码中托管了所有网络代码,我被告知这是不好的做法。

我尝试在 Visual Studio 中使用“提取到方法”工具,但我不断收到错误消息:"The selected text is not inside a method"

有谁知道我如何将此连接和断开代码提取到两个单独的方法中?

在将设备连接代码移动到它自己的模型之前,该类最初看起来像这样:

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 回答