前回「MVVMに触れてみた(1) - タイトルは未定」の続きで、今回は画面とロジックを分離してみます。
タイトルに反して、全くMVVMに触れてないですが、次回まで我慢です。
- ソースはこちら
nakaji/MVVMSample · GitHub
BmiViewModel.cs
BmiViewModelクラスを追加して、これにBMI計算に必要な身長、体重、そしてBMI計算のコードを移動します。
using System; namespace MVVMSample { public class BmiViewModel { public double Height { get; set; } public double Weight { get; set; } public double Bmi { get { return Math.Truncate(Weight / Math.Pow((Height / 100), 2) * 100) / 100; } } } }
MainWindow.xaml.cs
計算部分はBmiViewModelに移しましたので、それにあわせてコードビハインドの方を書き換えます。
これで計算部分が分離できました。
using System.Windows; namespace MVVMSample { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void calcButton_Click(object sender, RoutedEventArgs e) { var viewModel = new BmiViewModel(); viewModel.Height = double.Parse(heightText.Text); viewModel.Weight = double.Parse(weightText.Text); bmiText.Text = string.Format("{0,5:##.##}", viewModel.Bmi); } } }
BmiViewModelTest.cs
テストプロジェクトを追加して、以下のようにUnitTestが行えるようになりました。
テスト内容は適当なので大目に見てやってください。
using System; using MVVMSample; using NUnit.Framework; namespace MVVMSampleTest { [TestFixture] public class BmiViewModelTest { [Test] public void 正常() { var viewModel = new BmiViewModel(); viewModel.Height = 172; viewModel.Weight = 66; Assert.That(viewModel.Bmi, Is.EqualTo(22.30)); } } }
ソース
このエントリで作成したソースはこちら
テストプロジェクトを追加 · 54611fe · nakaji/MVVMSample · GitHub