كيف تنفذ بشكل صحيح iusertype؟
-
21-09-2019 - |
سؤال
أنا بحاجة لإنشاء ملف نوع مخصص ل nhibernate من خلال كتابة فئة خريطة جديدة تنفذ IUserType
. على الرغم من أنه من السهل نسبيًا تجاوز معظم الأساليب والخصائص ، إلا أنني أواجه بعض الصعوبات لفهم كيفية التعامل بشكل صحيح مع الأعضاء التالية:
object Assemble(object cached, object owner);
object DeepCopy(object value);
object Disassemble(object value);
object Replace(object original, object target, object owner);
أنا لا أفهم ما هو بالضبط الغرض منهم ؛ والأهم من ذلك ، كيفية تنفيذها بشكل صحيح. معظم الأمثلة التي رأيتها فقط إرجاع معلمة الإدخال الخام.
public object DeepCopy(object value)
{
return value;
}
public object Replace(object original, object target, object owner)
{
return original;
}
public object Assemble(object cached, object owner)
{
return cached;
}
public object Disassemble(object value)
{
return value;
}
كيفية تنفيذ هذه الأساليب بشكل صحيح في حالة حقيقية أو سيناريو أكثر تعقيدًا؟
المحلول
ألق نظرة على كيفية قيام ريتيش راو بهذا في Ncommon إطار العمل:
ال MoneyUserType ينفذ فئة قاعدة تسمى CompositeUserTypeBase
هناك المزيد من التفاصيل في التعليقات ولكن لتلخيص:
- DeepCopy - يجب أن تعيد نسخة عميقة من الحالة المستمرة ، والتوقف في الكيانات وفي المجموعات
- تفكيك - يحول الكائن إلى تمثيله "القابل للتخطيط" (يجب أن يتم تخزين جمعيات الجمعيات كقيم المعرفة)
- تجميع - إعادة بناء كائن من التمثيل القابل للتخطيط
نصائح أخرى
قد ترغب في التحقق من هذا مقالة - سلعة. إنه مثال جيد على كيفية تنفيذ واجهة iusertype.
لا تنتمي إلى StackOverflow