ファイル自動バックアップバッチプログラムの作成 – 設計編 –

    前回の記事:ファイル自動バックアップバッチプログラムの作成 – 仕様編 –

    では、今回作成するプログラムの作成を行うため、仕様を確定しました。

    今回の記事では、その仕様をもとに、プログラム設計をしたのでそれを書いていきます。

    機能をどのように設計するのか?

    漢鷹がいつも悩むことです。まだ半人前なので、うまく分けられていないかもしれませんね。

    以下のようにクラス分けを実施しました。

    クラス分け

    以下のように分けていきました。機能を「ユニット」という単位で書いていきます。

    当初考えたクラス分けは以下の通りです。 ※実際の実装が多少異なります。

    • メインユニット → Main()を含む、コンソールプログラム実行機能を持つクラス
    • XMLユニット → XMLファイル読み込みとデータ取得機能を持つクラス ※LINQ利用
    • ユーティリティユニット → コンソール文字列出力などのどのクラスでも利用する機能を持つstaticなクラス ※これだけstaticなので注意!
    • コピー/移動ユニット → ファイルのコピー/移動処理の機能を持つクラス
    • データ取扱ユニット → XMLデータをエンティティ(データの塊)クラスとして取り扱う機能を持つクラス

    クラス分けの考え方

    漢鷹は以下のように考えてクラス分けをしました

    • プログラムの流れをまず考える
    • 流れの中でやっていることを洗い出す
    • やっていることの流れを各処理のステップまで細分化する
    • やっていることが「機能」としてとらえられるか判断する
    • 「機能」がまとめられるか考える
    • 「機能」が共通化できないか考える

    クラスやメソッドなどのアクセスレベルの考え方

    漢鷹は以下のように考えてアクセスレベルを考えました

    メソッド・クラス共通のアクセスレベルの考え方

    • 「クラスの中でしか利用しないかつ、クラスの外からアクセスできなくてよい」 → private
    • 「クラスの外からアクセスして利用する」 → public

    プロパティや変数などのアクセスレベルの考え方

    • 前提:プロパティという形式で変数の「カプセル化」を行い、変数への安全なアクセスに配慮
    • プロパティ=「privateな変数」+「privateな変数にアクセスするためのGetter / Setter ユニット」 ととらえる ※つまり、クラスの外からのアクセスに対してGetter / Setterは「public」
    • 「変数が読み取り専用でよい」ならば「Setter」は不要
    • 「変数が設定専用でよい」ならば「Getter」は不要

    以上がクラス分けの内容となります。

    次の記事では、実際に作成したプログラムのコードを紹介します。

    次の記事:ファイル自動バックアップバッチプログラムの作成 – コード編その1 –

    似たカテゴリーの投稿