سؤال

نحن نحاول الخروج cqrs.. وبعد لدينا حالة التحقق من الصحة حيث يحتاج عرض العملاء (خدمة المجال) إلى معرفة ما إذا كان العميل موجود أم لا. العملاء فريدة من نوعها عن طريق عنوان بريدهم الإلكتروني. مستودع عملائنا (مستودع عام) يحصل فقط على (ID) وإضافة (عميل). كيف يجب أن يكتشف العملاء إذا كان العميل موجود؟

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

المحلول

نلقي نظرة على هذه المدونة وظيفة: ضبط التحقق من الصحة في بنية CQRS.

يعالج هذه المشكلة بالذات. إنها مشكلة معقدة للتعامل معها في CQRS. ما يقترحه BJARTE هو الاستعلام عن قاعدة بيانات التقارير عن عناوين البريد الإلكتروني للعميل الحالي وإصدار أمر تعويض (مثل CustomerEmailAddressIsNotUniqueCompensatingCommand) العودة إلى طراز المجال إذا تم العثور على عنوان بريد إلكتروني. يمكنك بعد ذلك إطلاق الأحداث المناسبة، والتي قد تشمل UndoCustomerCreationEvent.

اقرأ من خلال التعليقات على وظيفة المدونة أعلاه للأفكار البديلة.

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

لست متأكدا من وجود حل سهل لهذه المشكلة التي تشعر بالنظافة تماما. دعني اعرف ما الذي جئت به!

حظا طيبا وفقك الله!

نصائح أخرى

لا يجب أن تكون هذه القضايا هذا المجمع:

  1. تحقق من متجر التقارير الخاص بك لتفرد العملاء قبل إرسال الأمر UpdateCustomer.
  2. أضف قيدا إلى DB الخاص بك للتفرد على عنوان البريد الإلكتروني. عند تنفيذ الأمر، قم بتعامل مع الاستثناء وإرسال إشعار للمستخدم باستخدام قناة الرد. (لا تطلق الأحداث التي لا تطلق فيها أبدا أحداث Customerupdated إلى متجر التقارير.

استخدم قاعدة البيانات لما هو جيد لعدم تعليق قيود الأورم.

هذا المنشور من قبل udi dahan http://www.udidahan.com/2009/12/09/Clarified-cqrs/ يحتوي على الفقرة التالية:

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

أعتقد أن UDI اقترح ببساطة إضافة قيود فريدة من نوعها إلى قاعدة البيانات.

ولكن إذا كنت لا تشعر بالقيام بذلك، استنادا إلى البيان أعلاه، أود أن أقترح فقط إضافة طريقة "byemail" إلى المستودع ويتم ذلك - ولكن بعد ذلك مرة أخرى قد يكون لدى UDI اقتراحا أفضل ..

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

لذلك في هذه الحالة، يمكننا أن يكون لدينا فئة بالاسم، customeremailmustbeuniquerule التي يتم جلبها بواسطة ruleengine عند تنفيذ الأمر "تسجيل custiveCustomMand" على وشك التنفيذ بواسطة RegisterCustomCommandExecutor. تتحمل فئة القاعدة هذه مسؤولية الاستعلام عن قاعدة البيانات للعثور على معرف البريد الإلكتروني موجود وإيقاف التنفيذ عن طريق رفع العلم غير صالح ...

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