質問

現在、金融アプリケーションを書いていますが、かなり標準的な顧客テーブルがあります。これは、多くの必須フィールドと、Cell / Faxなどのオプションのフィールドで構成されています。NHibernateをORMとして使用しており、すべてのマッピングが適切です。すでに動作しています。

どうやって「表現」するのだろうか。コードでは、フィールドはコメントなしでnullではありませんか?これを文書化したhbm.xmlファイルがありますが、このようなものを探すのはちょっと面倒です。

もう1つ思い浮かぶのは、リポジトリでNHibernateの例外をロジックにスローしたくないので、コントローラーの検証ルートに進む必要があるかもしれないということです。 それでも、いくつかのフィールドがnullになる可能性があることをPOCOコードに表現させるにはどうすればよいですか?

クラス図

おわかりのように、携帯電話とFAXはオプションですが、電話は必須です。これらはすべて単なる複合マッピングであるため、マッピングファイルでは、それぞれの単一要素がnull以外でなければならないことを指定しているだけですが、NullReferenceExceptionが発生しないように、常にPerson.Cellular!= nullチェックを実行するのは嫌です。

役に立ちましたか?

解決

POCOの動作とコーディングスタイルに応じて、これを行う方法がいくつかあります。 まず、null許容型を使用して、このフィールドがnull許容であることを表現できます。したがって、残りはnull許容可能ではないことを暗黙的に示します。 または、説明したPOCOのPhoneプロパティの型としてPhone値型を導入することもできます。これは、プリミティブ型ではないため「より重要」であることを意味します。 -これにより、クラス自体に電話番号の検証をカプセル化することもできます。

真のPOCOオブジェクトであるためには、それが置かれているデータベーステーブル内の基礎となるNULL可能性について心配する必要はありません...実際には、スタンドアロンエンティティとしての動作を表す検証および値型が必要です。 ;したがって、NHibernateに到達する前に、すでに有効な状態になっています。

他のヒント

notnullプロパティを読み取り専用にし、パブリックコンストラクターを介して書き込みます。デフォルトのコンストラクタを保護またはプライベートにします。

public class DomainObject{
private string nnp;
protected DomainObject(){}
public DomainObject(string nnp){
this.nnp = nnp;
}
public string NotNullProp {get {return nnp;}}
public string NullableProp {get;set;} 
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top