自分が作るソフトは性能とリリースの早さを重視しているため、オブジェクト指向設計からはいくつか外れている部分があります。
一番悪い例は util.h です。これでもかというほどユーティリティ関数とクラスをごちゃまぜにしていますw
今回手を加えたタブのカスタマイズ機能も、Mz3GroupData クラスを拡張する形で実装していますが、個人的には委譲パターンが大好きなので、Mz3GroupDataReader/Writer/IOBase に分割して、Mz3GroupData 自身のタブデータ構造を際だたせたようと思っていました。が、それに1時間かけるよりも1時間早くリリースすることを選びました(笑)。
委譲パターンに拘らず、単純に継承すれば良かったのかもしれませんね。
また、オブジェクト指向設計としては掟破りのグローバル変数的なアクセスも多用しちゃっています。代表例は theApp ですね。grep すると嫌になるほど使われていて、うんざりしちゃいますが、これでもちゃんと自分ルールはあったりします(長くなるので以下略)。
とにもかくにも UI とロジックが共存してしまっているのは、MFC を母体としている限り仕方ないんじゃないかと思ってしまうわけです。結局のところ、どこがロジックでどこが UI 用コードなのかは切り分けしづらいということなのかしら。それにあまりにも分けすぎると物理的にはメモリのコピー(データ変換)ばっかりになってリソースがタイトな WindowsMobile では受け入れがたいということもありますね。
比較的ちゃんとしたオブジェクト指向設計をした MPSS については、これ以上機能追加できないくらい限界の速度(遅さ)になっちゃってますし。でも C# 大好き。