문제

현재 재무 신청서를 작성하고 있으며 꽤 표준 고객 테이블이 있습니다. 그것은 많은 필수 필드와 셀/팩스 등과 같은 옵션으로 구성되어 있습니다. 나는 nhibernate를 ORM으로 사용하고 있으며 모든 매핑을 올바르게 가지고 있습니다. 이미 작동합니다.

나는 코드에서 필드가 댓글을 달지 않고 무자비하지 않다는 것을 어떻게 "표현"합니까? 나는 이것을 문서화하는 hb.xml 파일을 가지고 있지만, 이와 같은 것을 보는 것은 어색합니다.

떠오르는 또 다른 것은 저장소가 내 논리에 nhibernate 예외를 던지기를 원하지 않기 때문에 컨트롤러에서 검증 경로를 가야한다는 것입니다. 그럼에도 불구하고 Poco 코드가 일부 필드가 널이 될 수 있다는 것을 어떻게 표현할 수 있습니까?

Class Diagram

보시다시피, 나는 전화 필수 동안 셀룰러와 팩스를 선택 사항으로 만들고 싶습니다. 그것들은 모두 복합 매핑 일 뿐이므로 매핑 파일은 단지 각각의 단일 요소가 널이 아니라고 지정하지만, 나는 사람을하지 않는 것을 싫어합니다 .Cellular! = null 님이 nullreferenceException을 피하기 위해 항상 확인하십시오.

도움이 되었습니까?

해결책

Poco 행동과 코딩 스타일에 따라이 작업을 수행하는 몇 가지 방법이 있습니다. 첫째, 귀중한 유형을 사용 하여이 필드가 무효가 될 수 있음을 표현할 수 있으므로 나머지는 무효가 될 수 없다는 것을 암시 할 수 있습니다. 또는 당신은 당신이 설명한 POCO의 전화 속성 유형으로 전화 값 유형을 소개 할 수 있습니다. 이는 원시 유형이 아니기 때문에 "더 중요하다"는 것을 암시합니다. 이것은 또한 클래스 내에서 전화 번호 검증을 캡슐화 할 수 있습니다. 그 자체.

제 생각에는 진정한 POCO 객체가 되려면, 데이터베이스 테이블 내에서 기본 무효가되는 것에 대해 걱정할 필요가 없습니다. 따라서 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