سؤال

وأنا أكتب حاليا تطبيق المالي، ولدينا جدول العملاء إلى حد قياسي. وهو يتألف من العديد من حقول إلزامية، وبعض اختياري مثل خلية / الفاكس وما إلى ذلك .. أنا باستخدام NHibernate باعتباره ORM، وجميع تعيينات الحق. وهو يعمل بالفعل.

وأنا فقط أتساءل، كيف يمكنني "التعبير" في التعليمات البرمجية أن الحقل غير الصفرية دون التعليق؟ لدي ملفات hbm.xml التي توثق هذا، ولكن هذا صعب نوعا ما أن ننظر إليها لمثل هذه الامور.

والشيء الآخر الذي يتبادر إلى الذهن هو أنني لا أريد مستودع لرمي الاستثناءات NHibernate في بلدي المنطق، لذلك ربما يجب أن أذهب مسار التحقق من صحة في وحدة تحكم. ومع ذلك، كيف يمكنني جعل رمز POCO تعبير عن أن بعض الحقول يمكن أن تكون فارغة؟

وكما ترون، أريد أن يكون الخلوية وفاكس تكون اختيارية بينما الهاتف إلزامية. انهم جميعا تعيينات فقط المركبة، وبالتالي فإن ملف التعيين يحدد فقط أن عناصر واحدة من كل يجب أن تكون يست لاغية، ولكن أنا أكره أن تفعل Person.Cellular! = فارغة تحقق من كل الوقت لتجنب وجود NullReferenceException.

هل كانت مفيدة؟

المحلول

وهناك عدد قليل من الطرق للقيام بذلك اعتمادا على سلوك POCO والترميز النمط. أولا، هل يمكن استخدام أنواع nullable للتعبير عن أن هذا المجال هو قيم الفارغة، وبالتالي فإنه سيكون ضمنيا أن بقية ليست قيم الفارغة. بدلا من ذلك يمكن إدخال نوع القيمة الهاتف كنوع للخاصية الهاتف من POCO لك يتضح، مما يعني أن لأنها ليست نوع بدائي هو "أكثر أهمية" - وهذا من شأنه أيضا تمكنك من تغليف الهاتف التحقق من صحة رقم داخل الطبقة نفسها.

في ذهني، ليكون كائن POCO صحيحا، فإنه لا داعي للقلق حول nullability الكامن داخل جدول قاعدة البيانات وpersited في ... كان ينبغي أن يكون في الواقع أنواع التحقق من صحة والقيمة التي تعبر عن السلوك ككيان قائم بذاته . وبالتالي قبل أن يحصل على 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