この特定のアプリケーションでは、別個のデータ層はなく、データ アクセス コードはエンティティ自体にあります。たとえば、Customer エンティティを考えてみましょう。メンバーとプロパティが定義されている Customer.cs ファイルには、以下のように Customer オブジェクトを読み込むメソッドがあります。
public bool TryLoad(int customerID, out Customer customer)
{
bool success = false
try
{
//code which calls the db and fills a SqlDataReader
ReadDataFromSqlDataReader(reader);
success = true;
}
catch(Exception ex)
{
LogError();
success = false;
}
return success;
}
現在、ReadDataFromSqlDataReader(reader) では、tryparse を使用してリーダーからオブジェクトにデータをロードしています。例えば
public void ReadDataFromSqlDataReader(reader)
{
int.TryParse(reader["CustomerID"].ToString(), out this.CustomerID);
PhoneNumber.TryParse(reader["PhoneNumber"].ToString(), out this.PhoneNumber);
... similar TryParse code for all the other fields..
}
TryParse を使用してリーダーからすべてのプロパティを読み取るのは良い方法ですか? TryParse は int.Parse よりもパフォーマンスが優れているため、開発者はこの方法で行われたと私に言いました。しかし、データベースから読み取っている値がコードが期待するものと一致しない場合に、例外をスローしたくありませんか? この場合、データベースに間違った電話番号がある場合、空の電話番号でオブジェクトをロードする代わりに、オブジェクトをまったく初期化しないでください。