سؤال

أنا أستخدم NHibernate في مشروع وأحتاج إلى إجراء تدقيق للبيانات.وجدت هذا المقال في codeproject الذي يناقش واجهة IInterceptor.

ما هي طريقتك المفضلة لتدقيق البيانات؟هل تستخدم مشغلات قاعدة البيانات؟هل تستخدم شيئًا مشابهًا لما تمت مناقشته في المقالة؟

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

المحلول

بالنسبة لـ NHibernate 2.0، يجب عليك أيضًا الاطلاع على مستمعو الأحداث.هذه هي تطور واجهة IInterceptor ونحن نستخدمها بنجاح للتدقيق.

نصائح أخرى

[يحرر]

بعد إصدار NH2.0، يرجى الاطلاع على مستمعي الحدث كما هو مقترح أدناه.إجابتي قديمة.


IInterceptor هي الطريقة الموصى بها لتعديل أي بيانات في nhibernate بطريقة غير جراحية.كما أنه مفيد لفك تشفير/تشفير البيانات دون الحاجة إلى معرفة رمز التطبيق الخاص بك.

تعمل المشغلات الموجودة في قاعدة البيانات على نقل مسؤولية التسجيل (أحد اهتمامات التطبيق) إلى طبقة نظام إدارة قواعد البيانات (DBMS) التي تربط بشكل فعال حل التسجيل الخاص بك بمنصة قاعدة البيانات الخاصة بك.من خلال تغليف آليات التدقيق في طبقة الثبات، يمكنك الاحتفاظ باستقلالية النظام الأساسي وإمكانية نقل التعليمات البرمجية.

أستخدم Interceptors في كود الإنتاج لتوفير التدقيق في عدد قليل من الأنظمة الكبيرة.

أفضّل نهج CodeProject الذي ذكرته.

إحدى مشكلات مشغلات قاعدة البيانات هي أنها لا تترك لك أي خيار سوى استخدام الأمان المتكامل مع ActiveDirectory للوصول إلى SQL Server الخاص بك.والسبب في ذلك هو أن اتصالك يجب أن يرث هوية المستخدم الذي قام بتشغيل الاتصال؛إذا كان التطبيق الخاص بك يستخدم حسابًا مسمى "sa" أو حسابات مستخدمين أخرى، فإن حقل "المستخدم" سيعكس "sa" فقط.

يمكن تجاوز ذلك عن طريق إنشاء حساب SQL Server مسمى لكل مستخدم للتطبيق، ولكن هذا سيكون غير عملي بالنسبة لتطبيقات الويب غير المتصلة بالإنترانت، وتطبيقات الويب العامة، على سبيل المثال.

يعجبني أسلوب Interceptor المذكور، واستخدمه في المشروع الذي أعمل عليه حاليًا.

ومع ذلك، أحد العيوب الواضحة التي تستحق تسليط الضوء عليها هو أن هذا النهج لن يؤدي إلا إلى تدقيق تغييرات البيانات التي تم إجراؤها عبر التطبيق الخاص بك.لن يتم تدقيق أي تعديلات مباشرة على البيانات مثل نصوص SQL المخصصة التي قد تحتاج إلى تنفيذها من وقت لآخر (يحدث ذلك دائمًا!) إلا إذا تذكرت إجراء عمليات إدراج جدول التدقيق في نفس الوقت.

أفهم أن هذا سؤال قديم.لكني أود الإجابة على هذا في ضوء نظام الأحداث الجديد في NH 2.0.يعد مستمعو الأحداث أفضل في الوظائف المشابهة للتدقيق من المعترضين.كتب Ayende مثالاً رائعًا على مدونته الشهر الماضي.إليك عنوان URL لنشر مدونته -

ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx

كنهج مختلف تمامًا، يمكنك استخدام نمط الديكور مع مستودعاتك.

قل لدي

public interface IRepository<EntityType> where EntityType:IAuditably
{ 
    public void Save(EntityType entity);
}

بعد ذلك، سيكون لدينا NHibernateRepository الخاص بنا:

public class NHibernateRepository<EntityType>:IRepository<EntityType>
{
   /*...*/
   public void Save ( EntityType entity )
   {
       session.SaveOrUpdate(entity);
   }
}

ثم يمكن أن يكون لدينا مستودع التدقيق:

public class AuditingRepository<EntityType>:IRepository<EntityType>
{
   /*...*/
   public void Save ( EntityType entity )
   {
       entity.LastUser = security.CurrentUser;
       entity.LastUpdate = DateTime.UtcNow;
       innerRepository.Save(entity)
   }
}

بعد ذلك، باستخدام IoC Framework (StructureMap، Castle Windsor، NInject) يمكنك بناء كل شيء دون معرفة بقية التعليمات البرمجية الخاصة بك أنك تجري عملية تدقيق.

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

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