سؤال

بعد أن شاهد هذا الفيديو من قبل Greg Yound على DDD

http://www.infoq.com/interviews/greg-young-ddd.

كنت أتساءل كيف يمكنك تنفيذ فصل استفسار الأوامر (CQS) مع DDD عندما يكون لديك تغييرات في الذاكرة؟

مع CQs لديك مستويين، واحدة لأوامر، واحدة للاستعلامات. بالإضافة إلى مجموعتين كائنتين، كائنات الأوامر وكائنات الاستعلام. تحتوي كائنات الأمر على طرق فقط، ولا توجد خصائص يمكن أن تعرض شكل الكائنات، ولا يتم استخدامها لعرض البيانات على الشاشة. يتم استخدام كائنات الاستعلام من ناحية أخرى لعرض البيانات إلى الشاشة.

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

هل يمكنك استخدام CQS مع شيء مثل وتحرير الشاشة في ASP.NET، حيث يتم إجراء تغييرات في الذاكرة وتحتاج إلى تحديث الشاشة عدة مرات مع التغييرات قبل استمرار التغييرات إلى قاعدة البيانات؟

علي سبيل المثال

  1. أحضر كائن الاستعلام من مستودع الاستعلام وعرضه على الشاشة
  2. أنا انقر فوق تحرير
  3. أرفع كائن استعلام من مستودع كائن الاستعلام وعرضه في النموذج في وضع التحرير
  4. أقوم بتغيير قيمة في النموذج، والتي تعود إلى الوراء ويحمل كائن الأمر وقضايا الأمر ذي الصلة
  5. ما يجب القيام به: أحتاج الآن إلى عرض الكائن المحدث أثناء إجراء الأمر تغييرات على الحقول المحسوبة. نظرا لأن كائن الأمر لم يتم حفظه في قاعدة البيانات لا يمكنني استخدام مستودع الاستعلام. ومع CQS، لا أقصد أن أعرض شكل كائن الأمر لعرضه على الشاشة. كيف يمكنك الحصول على كائن استعلام مع التغييرات المحدثة لعرضها على الشاشة.

بعض الحلول الممكنة التي يمكنني التفكير فيها هي الحصول على مستودع جلسة، أو طريقة للحصول على كائن الاستعلام من كائن الأمر. أو هل لا تنطبق CQs على هذا النوع من السيناريو؟

يبدو لي أنه في كل تغييرات الفيديو، أصبحت تتسابق على الفور إلى قاعدة البيانات، ولم أجد مثالا على DDD مع CQS يعالج مشكلة تغييرات الخلط إلى كائن مجال وتحديث عرض كائن المجال المعدل من قبل وأخيرا إصدار أمر لحفظ كائن المجال.

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

المحلول

إذا كنت ترغب حقا في استخدام CQs لهذا الغرض، أود أن أقول أن كل من REPO الاستعلام والكتابة ريبو كلاهما لديه إشارة إلى نفس متجر الدعم. عادة ما يكون هذا المرجع عبر قاعدة بيانات خارجية - ولكن في حالتك قد تكون قائمةu003CT> أو مشابه.

نصائح أخرى

إذن ما يبدو وكأنه تريد هنا هو أمر أكثر حبيبية.

على سبيل المثال: يتفاعل المستخدم مع صفحة الويب (دعنا نقول القيام بفحص مع عربة تسوق).

الصفحات المتعددة الحصول على المعلومات تقوم ببناء أمر. لا يتم إرسال الأمر حتى المستخدم فعلا يتحقق من أين يتم إرسال جميع المعلومات في أمر واحد إلى المجال دعونا نسميها أمر "Checkout".

نماذج العرض التقديمي مفيدة للغاية في تجريد هذا النوع من التفاعل.

أتمنى أن يساعدك هذا.

جريج

أيضا لبقية مخاوفك ...

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

في الذاكرة، سوف تستخدم عادة نمط تصميم المراقب.

في الواقع، تريد دائما استخدام هذا النمط ولكن معظم قواعد البيانات لا تقدم وسيلة فعالة لاستدعاء طريقة في تطبيقك عندما يتغير شيء في DB.

ال وحدة العمل نمط تصميم من أنماط تطبيقات تطبيق المؤسسة يطابق CQS بشكل جيد للغاية - إنه في الأساس أمر كبير يسيسر الاشياء في قاعدة البيانات.

JDonframework هو Framework CQRS DDD Java، وهو يوفر أحداث مجال + نمط غير متزامن، مزيد من التفاصيل https://jdon.dev.java.net/

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