スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: スポンサー広告

クラスはできるだけシンプルが良い(Logic編)

クラス設計、メソッド設計における指針は、
できるだけシンプルが良い
にしている。だって、複雑なのを作っても、後(数ヶ月後)で困るし。
SEだろうとPGだろうと、暇な人は少ない。
いつまでも前の仕事で使ったメソッドの複雑な引数とか、クラスの構造を記憶している人も少ない。
引数がいくつもあって、更に何のコメントもないメソッドをどうしろと?

/// <summary>
/// 何するメソッドだよ!
/// </summary>
/// <param name="id"></param>
/// <param name="code"></param>
/// <param name="ucode"></param>
/// <param name="items"></param>
/// <param name="del"></param>
private void CreateProduct(int id, string code, string ucode, string[] items, bool del) {
//...
}

せめて、何をどうするかくらいは書け!と突っ込みたくなる。
閑話休題、どうシンプルにすれば良いかをメモる事にする。
Logic系クラス
提供する(publicな)メソッドは、メソッドの引数や戻り値を、入力と出力2種類に縛る。
メソッドの設計は非常にシンプルになる。だって、入力と出力しかないんだから。

/// <summary>
/// 入力用クラス
/// </summary>
public class InputContainer {
}

/// <summary>
/// 出力用クラス
/// </summary>
public class OutputContainer {
}

/// <summary>
/// Logicクラス
/// </summary>
public class BusinessLogic {

/// <summary>
/// 処理を実行するよ。<br/>
/// 入力(input)に対して、処理結果となる出力(output)を返します。<br/>
/// </summary>
/// <param name="input">入力</param>
/// <returns>出力</returns>
public OutputContainer DoBusinessProcess(InputContainer input) {
var output = new OutputContainer();
//...
return output;
}

/// <summary>
/// 処理を実行するよ。<br/>
/// 入力(input)に対して、処理結果を引数の出力(output)に渡します。<br/>
/// 出力を使いまわしたい時に必要になります。<br/>
/// </summary>
/// <param name="input">入力</param>
/// <param name="output">入力</param>
public void DoBusinessProcess(InputContainer input, OutputContainer output) {
//...
return;
}
}

メソッドは、大体上の2パターンで事足りる。後は、入力と出力にどういうデータを持たせるかだけになる。
窓口をシンプルにするFacade(ファサード)パターンに似ているかな。
これは、うちの師匠が考えた初心者用の設計だったりするので、わかってしまえば使いやすい。

メソッドの引数と戻り値を固定する事による恩恵。

・メソッドが複雑になりにくい。
・統一されたメソッドなので、リフレクション系で呼び出し安くなる。
 ≒共通系(フレームワーク)の実装がやりやすい。
・メソッドの引数について悩まなくて良い。


課題。
データベース接続情報や設定ファイルの情報等、入力/出力に当てはまらない情報の扱いをどうするか?

色々書いたけど、シンプルに言えば
出入口はシンプルな方がすっきりする。
かな。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: C# | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。