أين أضع منطق العمل عندما أستخدم نمط المستودع؟

StackOverflow https://stackoverflow.com/questions/1618673

  •  06-07-2019
  •  | 
  •  

سؤال

أنا أستخدم نمط المستودع لطلبي.لدي فئة المستخدم.يتم التعرف على المستخدم عن طريق البريد الإلكتروني.يحتوي UserRepository على طريقة CreateUser(مستخدم مستخدم).هناك قاعدة عمل تنص على أنه يجب أن يكون لدى المستخدمين بريد إلكتروني فريد.

أريد تنفيذ معاملة تتحقق أولاً مما إذا كان البريد الإلكتروني قيد الاستخدام أم لا، وإذا لم يكن كذلك، فسيتم إنشاء المستخدم. أين يجب أن أضع هذا الكود المسؤول عن التحقق من تفرد البريد الإلكتروني؟

هذه بالتأكيد قاعدة عمل؛إنه منطق العمل.أعتقد أنه ليس من الصحيح وضع هذا الاختيار في تطبيق UserRepository الخاص بي.

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

المحلول

عادةً ما يتم إدخال هذا النوع من الأشياء إما في (1) خدمة أو (2) مباشرةً في المخطط كقيد لقاعدة البيانات (وفي كثير من الأحيان كليهما).

باستخدام الخدمة، لا يمكنك الوصول إلى المستودع مباشرة من كود العميل؛يمكنك الاتصال بخدمة تقوم بالعمليات المفيدة لك.

على سبيل المثال، شيء مثل:

public class UserService : ... {
  private Repository<User> _userRepository;

  public void CreateUser(User u) {
    // Verify that the user's email is unique.
    if ( ... ) {
      _userRepository.Create(u);
    }
  }
}

نصائح أخرى

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

بافتراض أنك تستخدم قاعدة بيانات للتخزين، يجب عليك بالتأكيد إضافة قيد فريد على عمود البريد الإلكتروني في قاعدة البيانات.

تحقق من هذه المقالة الممتازة على Simple Talk:

خمسة أخطاء بسيطة في تصميم قاعدة البيانات يجب عليك تجنبها

انظر في القسم 4:

فرض النزاهة عبر التطبيقات

ويفترضون أيضًا تطبيق القواعد بشكل انتقائي بناءً على احتياجات التطبيق هو أفضل طريق للاتخاذ......

الحل بسيط.

الاعتماد على أي شيء آخر لتقديمه الاكتمال والصواب فيما عدا قاعدة البيانات نفسها. By nothing, I mean neither users nor applications external to the database.**

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

مارك

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