元ネタはテレビで見た番組なのですが、WPFでMVVMのとっかかりに最小構成のものを作ってみました*1。
最小構成らしく、ICommand、INotifyPropertyChangedしか使ってません。
画面イメージ
しょぼいのは気にしない。WPFなのでその気になればセンスのある人にお願いできる(はず)
- 会議に出る人の名前と1時間あたりの単金を入力して追加します
- 会議開始にあわせて開始ボタンを押すと1秒単位にトータルコストと個人単位のコストが更新されます
- 途中参加する人も随時追加可能
- 途中退出は認めません
ソース
GitHubに晒しておきます。https://github.com/nakaji/CostCounter
各クラスと役割は以下の通り。(あれ、いろんな役割持ってるクラスが…)
Model
- Participant
会議参加者。- 自身の経過時間と単金を管理する
- 自身のコストを計算する
- TimeKeeper
会議時間を管理する人。- 会議参加者を管理する
- 今の時間を参加者に通知する
- トータルコストを管理する
- Clock
TimeKeeperが使う時計。テストで実時間を使いたくないので作った。
View
- MainWindow
メインウィンドウ
ViewModel
- Command
ICommandを実装したクラス - MainWindowViewModel
メインウィンドウのViewModel
Common
- ModelBase
INotifyPropertyChangedを実装したクラス*2
わからないこと
ModelとViewModelの分け方
個人単位のコストも画面に表示したかったので、Model内のParticipantにもModelBaseを継承(INotifyPropertyChangedを実装)させました。ModelにINotifyPropertyChangedを実装してもいいんだよね?
今後やりたいこと
- 個人単位での会議中止、再開
各リストに開始、停止ボタンを置いてごにょごにょ - コストの更新間隔の変更
今は1秒固定 - 会議参加者への通知方法変更
System.Threading.Timer使って定期的に通知してるけど、もっといい方法あるんでしょうね。Rxとか?
お粗末様でした。
ほんまにお粗末orz…