كيفية تفصيل المسؤولية في استعلام القيادة (CQRS) مع ASP.NET MVC؟

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

سؤال

لقد قرأت عن تفاصيل مسؤولية استعلام القيادة (CQRS). وبعد أنا أتساءل كيف سيكون هذا العمل مع ASP.NET MVC؟ أحصل على فكرة CQRS من الناحية النظرية، فإنه يبدو لطيفا بالتأكيد ويقدم بعض التعقيدات (نمط الحدث والمراسلة) مقارنة بالنهج "العادي / الشائع". أيضا فكرة نوع CQRS ضد استخدام Orm في بعض النواحي. أحاول أن أفكر في كيفية استخدام هذا النمط في المشاريع المقبلة، لذا إذا كان أي شخص لديه خبرة في الجمع بين CQRS مع ASP.NET MVC و Thhibernate، فيرجى إعطاء بعض الأمثلة الملموسة لمساعدتي بشكل أفضل على فهم CQRS واستخدامها باستخدام ASP.NET MVC. شكرا!

تحديث: لقد تم تمرير رمز نموذج العلامة. إنه أمر يجب أن تقرأ إذا كنت تعلم CQRS.

http://github.com/marknijhof/fohjin.

http://cre8ivethount.com/blog/2009/11/12/cqrs - la-leg-young/

http://cre8ivethount.com/blog/2009/11/28/cqrs-tning-to-make-it-re-usable/

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

المحلول

CQRS يجعل مشروع الويب أسهل بكثير. على موقع الحصول على موقع، ستبدو جميع الاستعلامات "تحديد * من الجدول حيث معرف = ID"). بالنسبة لتلك الاستفسارات البسيطة، لن تحتاج إلى orm مثل nhihiberante. ليس لديك لاستخدام قاعدة بيانات SQL، وعندما ستقوم، يمكنك تسلسل كائنك إلى جدول قاعدة البيانات، أو استخدم اصطلاحا للتسمية. لا يزال بإمكانك الاستعلام عن قاعدة بيانات القراءة بواسطة Nibernate، لكنك لن تحصل على أي ميزة منه، لأن جميع استفساراتك ستكون هي نفسها.

public class Controller
{
  public ActionResult Get(Guid id)
  {
     var viewModel = reportingDatabase.Get(id);
     return View(viewmodel);
  }
}

على جانب القيادة، ستبدو وحدات التحكم مثل هذا:

public class Controller
{
  public ActionResult Post(SomeForm form)
  {
    // do validation
    var command = new SomeCommand(form.Property1, form.Property2);
    bus.Send(command);
    return redirecto(something else);
  }
}

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

نصائح أخرى

يرجى إلقاء نظرة على بلدي dddsample.net. مشروع على codeplex. يتم تطبيق واجهة المستخدم الرسومية باستخدام ASP.NET MVC أثناء وجود منطق الأعمال باستخدام ممارسات DDD في 4 متغيرات مختلفة:

  • الكلاسيكية (لا cqrs)
  • CQRs مع مخازن البيانات الخاصة ب Thnhibernate
  • CQRS مع LinQ إلى SQL على جانب الإبلاغ
  • CQRs مع مصادر الحدث على جانب القيادة

وإلقاء نظرة على محاولتي في http://agrcqrs.codeplex.com., ، وهو ASP.NET MVC + NHIBERNATE

هنا مثال كامل كتبته ل بلدي cqrs lib skritchy:

إنشاء تطبيق CQRS الخاص بك باستخدام حزمة Nuget Scritchy ومباشر جدا و يحصل لك وتشغيلها في بضع دقائق

في المنشور التالي، قد تجد موارد مثيرة للاهتمام: كيفية تكييف CQRS للمشاريع

الشخص الذي وجدت مثيرا للاهتمام بشكل خاص هو رحلة CQRS., من مايكروسوفت. قد تبدو مخيبة للآمال لإبعادها مع Windows Azure، ولكن انتظر ... لديها تطبيق لطيف للغاية لمتجر الأحداث وحافلة خدمة المؤسسات في SQL Server. ستجد الكثير من التعليقات في التعليمات البرمجية المصدرية للتطبيق التجريبي الذي يحذرك من استخدام تطبيق SQL في الإنتاج ... ولكن مع بعض القرص، يمكنك تكييفه إلى مشروعك. لقد فعلت ذلك، ويعمل جيدا جدا.

الكود نظيف (إنه من الرجال من أنماط وممارسات Microsoft). ستجد مثالا جيدا حول كيفية استخدام حقن التبعية (مع الوحدة)، وحافلة بخدمة مؤسسية بسيطة ولكنها فعالة (مع SQL Server و ADO.NET، مع مواضيع متوازية)، نموذج للقراءة مع إطار الكيان وغير ذلك الكثير. تعلمت منه كيفية القيام CQRS ومصادر الأحداث ... تذكر: كل شيء عن الأحداث

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