データベースにnullを許可する値がある場合は、マジックナンバーNullable<T>
の導入を使用しないでください。ただし、が(主)キーである場合は、おそらくnull可能であってはなりません(外部キーとして使用される場合を除く)。BookId
アップデート
データベースにクエリを実行し、一致するレコードが見つからないという点については、いくつかの解決策があります。アプリケーションが存在しないレコードを取得しようとした場合、通常はエラーを示しているため、例外をスローすることをお勧めします。
Book book = Book.GetById(id);
この場合、戻り値がnullの場合はどうしますか?おそらく、この行の後のコードは本で何かをしたいと思っており、nullの場合、メソッドは通常それ以上何もできません。
- より適切に実行できる例外をスローする
GetById()
(呼び出し元が例外に関するより多くのコンテキスト情報を持っている可能性があることを除いて)
- nullまたは呼び出し元による処理を必要とするエラーコードですぐに返されるが、それは事実上例外処理システムを再発明している
絶対に有効で、一致するレコードが見つからない場合は、TryGetパターンを使用することをお勧めします。
Book book;
if (Book.TryGetById(out book))
{
DoStuffWith(book);
}
else
{
DoStuffWithoutBook();
}
nullは一種の魔法の値であり、ビジネスロジックで実装の詳細(参照型またはnull許容値型がnullという名前の特別な値を取ることができる)を見たくないので、これはnullを返すよりも優れていると思います。欠点は、構成可能性が失われることです。書き込みができなくなりますBook.GetById(id).Order(100, supplier)
。
以下は、構成可能性を元に戻しますが、非常に大きな問題があります。呼び出しとの間に本が削除される可能性があるためExists()
、GetById()
このパターンを使用しないことを強くお勧めします。
if (Book.Exists(id))
{
Book book = Book.GetById(id).Order(100, supplier);
}
else
{
DoStuffWithoutBook();
}