VB.NETでPostgreSQL 条件を指定してレコードを検索する(Entity Framework使用)
以下の記事の続きです。
次は条件を指定した検索処理を行いたいと思います。
前回のテーブルを少し修正し以下のようにします。
何期生かをレコードに持たせるようにしました。
create table Users ( id serial , name character varying(30) , generation integer , constraint Users_PKC primary key (id) ) ; comment on table Users is 'Users'; comment on column Users.id is 'ID'; comment on column Users.name is '名前'; comment on column Users.generation is '期';
Userクラスも以下のように修正します。
Imports System.ComponentModel.DataAnnotations Imports System.ComponentModel.DataAnnotations.Schema <Table("users")> Public Class User <Key> <Column("id")> Public Property Id As Long <Column("name")> Public Property Name As String <Column("generation")> Public Property Generation As Integer End Class続きを読む
VB.NETでPostgreSQLに接続する(Entity Framework使用)
VB.NETのプロジェクトから、PostgreSQLへ接続する方法を紹介します。
DBへの接続には、Entity Frameworkを使用します。
今時ODBC接続とかないですよ、本当に。
もっと言っちゃうと、既存システムとかでない限りC#使いましょう。
VB.NETは新規で使う理由が全くありません。
開発環境は以下の通りです。
- Windows 8.1 Pro
- Visual Studio 2013 Proffesional
- PostgreSQL 9.1
- Entity Framework 6.1.3
- .NET Framework 4.5
Entity Frameworkの導入
適当なプロジェクトを作成(ここではWindows Formプロジェクトを作成しています)して、
[参照設定] - [NuGet パッケージの管理]を選択します。
出てきたウインドウの右上の検索キーワードにEntityと入力すると、
画面の通り、Entity Frameworkが出てくるのでインストールボタンをクリックしてインストールしてください。
Javaのジェネリクスのワイルドカードが便利だった
複数の階層構造を表すJSON形式の文字列を一つの処理でクライアントに返す必要があった時に、
少し詰まったのでメモとして。
JSONへの変換にはGsonを使いました。
以下のような構造が異なる二つのクラスを、
一回の処理でJSON形式の文字列にする方法を考えたときに、
ワイルドカードで書くことでうまくできました。
/** * モーニング娘。のメンバー */ public class MorningMusumeMember implements HelloProject{ private String generation; private String name; private String yomi; public MorningMusumeMember(String generation,String name,String yomi){ this.generation = generation; this.name = name; this.yomi = yomi; } }
モーニング娘。は、何期加入かと名前と読み仮名を保持するようにしておきます。
/** * Berryz工房のメンバー * @author ta * */ public class BerryzKoboMember implements HelloProject{ private String name; private String yomi; public BerryzKoboMember(String name,String yomi){ this.name = name; this.yomi = yomi; } }
Berryz工房には、1期2期といった概念がないので、名前と読み仮名だけにしておきます。
続きを読むドメインモデル貧血症の処方箋
以前のプロジェクトで、ドメインモデル貧血症なプログラムに悩まされたので、学んだことを書いてみます。
ドメインモデル貧血症とは
オブジェクト指向におけるアンチパターン。
振る舞いとデータが分かれてしまっており、手続型の設計・実装になってしまう状態。
詳しくは以下のURLで。
Martin Fowler's Bliki in Japanese - ドメインモデル貧血症
自分なりの理解では、ドメインモデル=エンティティクラスと思ってます。
試しに以下のような従業員クラスでドメインモデル貧血症を考えてみたいと思います。
/** * 従業員クラス */ public class Employee { private int employeeId; private String familyName; private String firstName; private double weight; private double height; //getter setter }