توسعه دهنده ارشد نرم افزار
CQRS چیست و چه کاربردی دارد؟
جداسازی روش های خواندن اطلاعات (Read Operations) از عملیات بروزرسانی و ثبت (Write Operations) با استفاده از رابط های کاربری مجزا بحثی است که CQRS به آن میپردازد .
زمینه و مشکل
در ساختار های قدیمی از مدل های اطلاعاتی (Data Model) یکسان برای پرس و جو (Query) و بروزرسانی اطلاعات استفاده میشد که ساده بود و برای عملیات پایه CRUD (Create,Read,Update,Delete) مناسب بود . با این حال در نرم افزار های پیچیده تر این میتواند مشکل ساز شود .
برای مثال در سمت Read Data برنامه شما باید Query های زیادی را اعمال کند ، داده ها را واکشی کند و DTO (Data Transfer Object) های واکشی شده را به اشیای مختلف تبدیل نماید (Object Mapping) که میتواند کار بسیار پیچیده ای باشد .
در سمت Write Data برنامه دارای اعتبار سنجی ها و منطق های نرم افزاری (Business Logic) پیچیده است .
در نتیجه با CQRS، شما می توانید برای استفاده از یک مدل که بیش از حد پیچیده و کارهای بسیار زیادی انجام می دهد پایان دهید.
- اغلب عدم تطابق بین خواندن ، ثبت و ارائه اطلاعات مانند ستون های و خصوصیات (Property) اضافی که باید به درستی به روز شود وجود دارد .حتی اگر آنها به عنوان بخشی از یک عملیات مورد نیاز نیست.
- ساختار های سنتی میتواند اثرات منفی در کارایی واکشی اطلاعات و یا ثبت اطلاعات بر جا بگذارد و یا همچنین میتواند باعث پیچیدگی در اعمال Query ها برای واکشی اطلاعات شود .
- مدیریت امنیت و دسترسی میتواند بسیار پیچیده شود زیرا هر Entity به هر دو عملیات Read و Write وابسته است .
راه حل
جداسازی عملیات Reads و Writes به مدل های متفاوت کاری است که Cqrs انجام میدهد . برای بروزرسانی اطلاعات از Commands و برای واکشی اطلاعات و خواندن از Queries استفاده میکنیم .
- دستورات (Commands) باید بجای داده محور وظیفه محور باشد . (Task base)
- دستورات (Commands) باید به صورت asynchronous (ناهمزمان) پردازش شود.
- پرس و جو ها (Queries) نباید هیچ گاه تغیری در پایگاه داده بدهند.
مطلبی دیگر از این انتشارات
دستورات اولیه گیت - جلسه دوم
مطلبی دیگر از این انتشارات
آموزش فارسی راه اندازی جنگو روی لینوکس
مطلبی دیگر از این انتشارات
نوشتن بات تلگرام با node js