ラフなクラスモジュール設計

競馬データJVDataからSQLiteデータベースを構築するExcel VBAプロジェクトのラフなクラスモジュール設計をしました。細かい点はコーディングしながら考えます。

クラス図

中枢機能を持つクラスは

  • JVLinkとの接続やレコードの取得などを行う JVLinkConnectionクラス
  • レコードをパースしてテーブルコレクションを作成する JVDataParserクラス
  • テーブルコレクションからSQL文を生成する SQLStatementクラス
  • SQL文を実行するなどデータベースとの接続や操作を行う SQLiteDBConnectionクラス

としました。

さらに、これらのクラスから使用するクラスは

  • プロセス中のjvdファイル情報とレコードを蓄積する JVDataCollectionクラス
  • jvdファイル情報リストを管理する JVDataFileListクラス
  • ユーザーにメッセージを通知する Messageクラス
  • プログラムの実行を記録する Logクラス
  • 37種類のレコードフォーマットを扱う JVDataFormatクラス
  • コレクションで表を具体化する TableCollectionクラス
  • 高速なテキスト処理を行う TextSystemクラス
  • 文字コードUTF-8ファイルシステム UTF8FileSystemクラス

としました。

JVLinkConnectionクラスのオブジェクトは、JVLinkの初期化、オープン、レコード取得、クローズと一連のJVLinkの操作を行います。JVDataFileListクラスのオブジェクトにより取得したjvdファイルが判別できるようにして、取得したレコードはJVDataCollectionクラスのオブジェクトに蓄積します。

JVDataCollectionクラスのオブジェクトに蓄積したレコードをJVDataParserクラスのオブエジェクトがパースして、TableCollectionクラスのオブジェクトにテーブルを追加します。

TableCollectionクラスのオブジェクトのパースしたデータをSQLStatementクラスのオブジェクトがSQL文に生成しTextSystemクラスのオブジェクトに保存します。

SQLiteDBConnectionクラスのオブジェクトがTextSystemクラスのオブジェクトに保存されたSQL文をSQLiteのRDBMSにクエリします。

設計がすごいラフなのは、Excel VBAで実装してみないとわからないことがあるからです。オブジェクト設計も少しはしたのですが、細かいことが決められないので途中でやめました。

これでラフながら設計ができたので、コーディングと設計を行き来しながら、開発を進めていこうと思います。

Kosuke Maeda / まえだこうすけ

「機械学習で競馬予想して勝てるのか?」をテーマに活動中! QiitaにはR、VBAなどのTipsを投稿しています。