كيف يمكنني التحقق من صحة خاصية تحتاج إلى الوصول إلى مستودع في XVAL؟
-
19-09-2019 - |
سؤال
أحاول استخدام 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
للإشارة إلى حالة غير صالحة (في حالة عدم واضحة).