كيف يمكنني التحقق من صحة خاصية تحتاج إلى الوصول إلى مستودع في XVAL؟

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

سؤال

أحاول استخدام XVAL للتحقق من صحة تسجيل مستخدم جديد. لقد صادفت إلى منشارا عند محاولة تنفيذ المنطق الذي يتحقق لمعرفة ما إذا كان اسم المستخدم الذي يحاول المستخدم الجديد تسجيله بالفعل. لا يبدو لي أن أجد طريقة لإنجاز هذا دون وجود كيان المستخدم لدي اعتماد على مستخدمي المستخدمين. إليك الطريقة التي أحتاج إلى إيجاد طريقة لتنفيذ كيان المستخدم الخاص بي:

public IEnumerable<ErrorInfo> ValidateUniqueUserName(string username)
{
    if(usersRepository.Users.Exists(m => (m.UserName == username)))
        yield return new ErrorInfo("UserName", "User name already exists");
}

أي أفكار حول كيفية الاستمرار في استخدام XVAL لهذا السيناريو والحفاظ على كيان المستخدم الخاص بي مدفأ من المستخدمين الخاص بي؟

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

المحلول

سيقترح DDD أنه قد يكون لديك خدمة مجال لإجراء مجردة المستخدمين REPO من صحة المجال (Informcing Inforyt).

أود أن أعرف أين يوجد الكود من مثالك أعلاه (خدمة التحقق من الصحة)؟ لكنني أقترح عليك التأكد من أنه في المجال. هنا طريقة ذكية لإرفاق التحقق المعقدة للكيانات التي لا تزال تدعم IDataErrorInfo واجهه المستخدم.

ما أقترحه هو خدمة مجال ضمن طريقة التحقق من الصحة التي ترجع Users.Exists استفسار. شيء مثل:

        base.AddRule(new ValidationRule()
        {
            Properties = "username",
            Description = "User name already exists",
            validator = () => !(new UserService()).Users.Exists(m => (m.UserName == username))
        });

في المثال أعلاه، سأصدر دي لحقن التبعيات المناسبة في UserService للوصول إلى Repo / البيانات ولكن يمكنك استخدام طريقة إنشاء كائن DI المصنع أو دليل DI إذا كنت ترغب في:

        base.AddRule(new ValidationRule()
        {
            Properties = "username",
            Description = "User name already exists",
            validator = () =>
                {
                    UserService us = ObjectFactory.GetInstance<UserService>();
                    return !us.Users.Exists(m => (m.UserName == username));
                }
        });

لاحظ ال فوق الطريقة يتطلب validator الممتلكات لتعيين false للإشارة إلى حالة غير صالحة (في حالة عدم واضحة).

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