ラブびあ

ビール。ときどきラブ

DBとUIのデータ形式を変換する

データベースで'0'や'1'で保持している値を、ユーザーインターフェースではCheckBoxで表現したい、などというケースはよくあります。一般的にはDBEntityとUIEntityを別クラスで作ってDxo機能で変換するようですが、DBとUIが密接なEntity(画面表示用のSELECTと対になるEntity)に、変換機能を持たせることで一層減らす方法を考えました。

SeasarもListViewもEntityにプロパティ名でアクセスするので、まずいつも通りDB側の定義から生成したEntityに、UI用のプロパティを追加しています。例ではDB側は表示区分Varchar2のカラムをstringのプロパティで受けて、UIとはboolのプロパティでget/setできるようにしています。C#ではプロパティのoverloadができないので、苦肉でUI用のプロパティにはプレフィクスUIを付けています。

public string 表示区分 { get; set; }
public bool UI表示区分
{
    get { return 表示区分 == 区分定数.表示区分.表示する; }
    set { 表示区分 = value ? 区分定数.表示区分.表示する : 区分定数.表示区分.表示しない; }
}
static class 区分定数
{
    static class 表示区分
    {
        public static string 表示しない = "0";
        public static string 表示する = "1";
    }
}