توسعه دهنده ارشد نرم افزار
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) نباید هیچ گاه تغیری در پایگاه داده بدهند.
مطلبی دیگر از این انتشارات
راهنمای عملی توسعه مبتنی بر آزمون(TDD) در تولید نرمافزار
مطلبی دیگر از این انتشارات
تابع IIF در Sql
مطلبی دیگر از این انتشارات
ضد الگوها در توسعه نرمافزار چه هستند؟