سؤال

وأنا حاليا على تطوير نظام الموارد البشرية ASP.NET. أنا باستخدام بنية الطبقات مع عميل الويب مصنع البرمجيات، والتي تقوم على نمط MVP. ORM هو NHibernate. ولست بحاجة لتنفيذ وحدة نمطية سجل التدقيق. لقد قرأت الكثير عن نهج مختلفة. معظمهم تصف كيفية تتبع التاريخ، timastamp وهوية الشخص الذي قدم هذا التغيير، ولكن لا يمكن لأحد أن يقول لي عن ذلك واحد: كيف لتتبع التغيرات من أي ممتلكات في طبقة المجال الخاص بي؟ أنا لست بحاجة إلى أي القدرة على التراجع، ولست بحاجة دخول فقط مع: منظمة الصحة العالمية، عندما وما ممتلكات ما الكائن تم تغيير والقيمة القديمة والقيمة الجديدة لتلك الممتلكات

وأنا لا تستطيع أن تقرر أين يضع المعالج من هذه التغييرات. وأشار فاولر لدخول التدقيق في طريقة اضع من الخصائص، ولكن ما زلت تريد أن تبقي الطبقات نطاقي POCO`s بسيطة. ربما يكون هناك بعض النهج الآخر؟

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

المحلول

وكان علي أن أفعل هذا قبل بضع سنوات لنظام الموارد البشرية كذلك. I انجازه وجود كل ما عندي "الحقول" تنفيذ قالب (عام):

وهنا مثال على القالب صنعت تشذب:

class DataField<T>
{
    public T Current { get; set; }
    public T Original { get; set; }
    // stores the field name as a nice textual readable representation.
    // would default to property name if not defined.
    public string FieldName { get; set; }
    public bool Modified
    {
        get { return !(Current.Equals(Original));
    }

    public DataField(T value)
    {
        Original = Current = value;
    }

    public DataField(T value, T fieldName)
    {
        Original = Current = value;
        FieldName = fieldName;
    }
}

وكان الجزء مثيرة للاهتمام حول هذا الموضوع التي جعلت auditting السهل أن كل كائن يمكن أن تنتج انها سجل التدقيق الخاصة. أنا يمكن أن تأخذ أي شيء يمكن أن يكون x عدد هذه "الحقول" واستدعاء GetAudit على ذلك، وأنها ستعود لي كائن التدقيق مع كل التغييرات إلى فئة تظهر اسم الحقل، فال القديم، الجديد فال الخ .. كل سوف "DataField الخاص" تنفيذ طريقة للعودة كائن التدقيق. سلاسل، مزدوجة، [إينتس] وما كان خبز حد كبير في ولكن إذا كنت تستخدم مخصصة الكائنات التي يمكن أن يكتب تنفيذ التدقيق بالنسبة لهم مجرد أن اضطر إلى العودة كائن التدقيق.

وحتى في شكل نموذجي في نهاية كنت أود أن يكون كل البيانات المخزنة في كائن واحد التي لديها كل هذه الأنواع من المجالات. ثم أود أن لا تحديثا واستدعاء الأسلوب GetAudit التي من شأنها أيضا أن يكتب إلى جدول التدقيق كذلك.

ويمكنني أن أقول بسهولة إذا كان أي شيء قد تغير في شكل حتى لو كان عليه أن يذهب من خلال عدة صفحات وغيرها.

وفي تراجع كان من السهل حقا على حقل من الحقل، فرعا فرعا أو على مستوى الكائن بأكمله أيضا.

وضبابي قليلا على التفاصيل الدقيقة كما لم أتطرق التعليمات البرمجية في وقت طويل ولكن هذا هو جوهر ذلك. نأمل أن يساعد.

نصائح أخرى

وربما يمكنك تنفيذ نمط مراقب، ولكن، منذ صافي ينفذ هذا النمط ضمنا (مع الأحداث) وأعتقد القيمة لن يكون هناك وأضاف بكثير.

وربما يمكنك حفظ objetcs "الاصلي" ومقارنتها مع الكائنات المعدلة وعندما يحين الوقت المناسب (ربما باستخدام الانعكاس) ومعرفة ما تغيرت خصائص وما قيمة الجديدة هي. ومع ذلك، لاحظ أنه لا يمكنك جعل deepcopies الكائنات في صافي (إلا إذا كنت يمكن تسلسل الكائنات)، حتى أن تبقي في الاعتبار لهذا الحل

وإما تحتاج إلى الحفاظ على البيانات الأصلية حولها في وجوه الخاص بك أو تسحبه من قاعدة بيانات لتسجيل قبل التحديث.

ولقد رأيت هذا تنفيذها في طبقة البيانات، سواء في الإجراءات أو مشغلات المخزنة، ولكن أبدا في طبقة المجال.

وتحرير: مثال 2 جزء من قاعدة بيانات باستخدام يؤدي إلى تسجيل التاريخ وجدت هنا: http://www.4guysfromrolla.com/webtech/041807-1.shtml ويبدو أن الكثير من مناقشة جيدة حول إيجابيات / سلبيات هذه التقنية. وآمل أن يساعد.

هل راجعت من تسجيل كتلة تطبيق من مايكروسوفت مكتبة المؤسسة؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top