なか日記

一度きりの人生、楽しく生きよう。

会議にかかっているコストを見える化するアプリ

元ネタはテレビで見た番組なのですが、WPFでMVVMのとっかかりに最小構成のものを作ってみました*1
最小構成らしく、ICommand、INotifyPropertyChangedしか使ってません。

画面イメージ

しょぼいのは気にしない。WPFなのでその気になればセンスのある人にお願いできる(はず)
f:id:nakaji999:20110313211635p:image

  • 会議に出る人の名前と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…

*1:それ以上のものは作れないという噂もあり

*2:View,ViewModelの両方から使用するので悩んだ結果ここに