スポンサーサイト

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

クラスはシンプルが良い(Container編)

オブジェクト指向を過信して構造を複雑化しない。するならするで、インスタンスの作り方が明確になるようにする。多少手順を間違えても、Null参照が発生しないようにする。
仕事においては、帳票や、画面に表示するリストに表示させる項目を元にクラスが作られる。
DB内のテーブル通りにクラスを作り、クラスも同じような関係を構築しようと思ってた時があった。結果、複雑化して、インスタンス生成時にエラーで落ちる・・・昔ちょくちょくやった失敗である。
例えば、DBで言えば、FK(外部キー)にあたるなにかしらのコードがあり、それに対する名称があったとしよう。なにかしら妙なこだわりを持って、妙な構造を作ったしまった事がある。

//コメントは省略
public class PkData {

private FkData fkData_ = new FkData();

///
public string PkCode {
get; set;
}

public string FkCode {
get {return fkData_.FkCode;}
set {fkData_.FkCode = value;}
}

public string FkName {
get {return fkData_.FkName;}
set {fkData_.FkName = value;}
}

}


public FkData {
public string FkCode {
get; set;
}

public string FkName {
get; set;
}
}

なんていうかまあ、これも1つの形ではあるんだけど。
コンストラクタでnewしているから、内部変数のfkData_がnullでないなんていう保証はないと今なら思うんだ。
そして、さらに他の項目を出す時、追加で似たような実装をしなければならないと。うん。大変だ。
じゃあ、いちいちプロパティを仲介させなきゃ良いじゃん!って、

public class PkData {

private FkData fkData_ = new FkData();

///
public string PkCode {
get; set;
}

public FkData FkData {
get {return fkData_;}
set {fkData_ = value;}
}

}

public FkData {
public string FkCode {
get; set;
}

public string FkName {
get; set;
}
}

みたいにすると、また別の問題にぶち当たる。
Webサービスとか、WCFサービスって、通信するための共通的なクラス(Proxyクラス)を作る。この時、クライアントにサーバと同じ構造(プロパティ)のクラスが作られるんだけど、当たり前の話、メソッドやコンストラクタ内の実装までは引き継いでくれない(Webサービスは、名前空間すら引き継いではくれなかった)。
サーバから受け取ったPkDataのFkDataプロパティは、nullじゃない。でも、クライアントでPkDataを使いたくて、newする事があっても、FkDataはnullのまま。自分でnewしてやる必要がある。null参照のリスクを生むだけだ。で、結局は、こうなる。

public class PkData {

///
public string PkCode {
get; set;
}

public string FkCode {
get; set;
}

public string FkName {
get; set;
}

}

public FkData {

public string FkCode {
get; set;
}

public string FkName {
get; set;
}
}

ん。こうすれば、実装はちょっとシンプルになって、null参照の必要なところも最小限になる。
プロパティの2重持ちとも取れなくもないけど、ダウンロード、アップロードのデータ量をできるだけ抑えたい時や、応答時間を早めたい時は、シンプルな構造の方がより良い。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: C# | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


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

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

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

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

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