2

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

コメントせずにフィールドがnullではないことをコードで「表現」するにはどうすればよいのでしょうか。これを文書化した hbm.xml ファイルがありますが、このようなことを調べるのはちょっと厄介です。

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

クラス図

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

4

2 に答える 2

1

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;} 
}
于 2008-11-28T23:58:42.227 に答える
1

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

私の考えでは、真の POCO オブジェクトであるためには、保持されているデータベース テーブル内の基になる null 可能性について心配する必要はありません。実際には、スタンドアロン エンティティとしての動作を表現する検証と値の型が必要です。したがって、Hibernate に到達する前に、すでに有効な状態になっています。

于 2008-11-20T12:28:27.860 に答える