یه برنامه نویس ساده که سعی میکنه از تمام خطهای کدش لذت ببره
الگوی CQRS چیست
در سالهای گذشته با پیشرفت های تکنولوژی کم کم تیمهای فنی به استفاده از الگوهای برنامه نویسی روز روی آورده اند و سعی میکنند از الگوهایی استفاده کنند که کارایی بهتری برای نرم افزارشان داشته باشد.
یکی از این الگوها (CQRS(Command Query Responsibility Segregation میباشد.این الگو به دلیل کارایی بهتر نرم افزار یکی از الگوهای مورد علاقه ی من میباشد.در این مطلب سعی بر این است این که این الگو را توضیح بدهم.به خاطر داشته باشید که این الگو قرار نیست برای تمامی پروژه های مفید باشد و میتوان گفت تعداد کمی از پروژه ها هستند که امکانات این الگو نسبت به پیچیدگی آن ارزشمندتر است.
مفاهیم Command and Query
کامندها دستوراتی هستند که چیزی را برنمیگردانند و هدف اصلی آنها درج ،ویرایش و حذف میباشد اما کوئری ها دستوراتی هستند که در خروجی خود دیتاست برمیگرداند و برای گرفتن اطلاعات از دیتابیس استفاده میشود.
مسیر اصلی CQRS
اصلی ترین ایده ی پشت این الگو جدا کردن command و query ها میباشد.
تمام نرم افزارهایی در تلاش برای تعامل با یک سیستم اطلاعاتی و برخورداری از سیستم ذخیره سازی با CRUD هستند،به بیان ساده تر در تمامی سیستم ها مدل هایی وجود دارند که میخواهیم در آن اطلاعات جدید اضافه کنیم،اطلاعات قبلی را بخوانیم،اطلاعات قبلی رو ویرایش کنیم و یا آنها را حذف کنیم.
یک مثال ساده
فرض کنید یک در حال طراحی یک سیستم فروشگاهی هستید.ساختار دیتابیس یک فروشگاه پر از ارتباط است؛ هر محصول میتواند گروه داشته باشد،میتواند تعداد زیادی خاصیت و صفت داشته باشد،میتواند در سبد خرید تعداد زیادی کاربر باشد و خیلی چیزهای دیگر.
در این نوع سیستم ما به دلیل ساختار رابطه ای سیستم بهترین روش برای ذخیره سازی داده استفاده از دیتابیس های رابطه ای مانند Sql Server ، MySql میباشد.
همچنین در هنگام واکشی اطلاعات به دلیل خاصیت های زیادی که هر محصول میتواند داشته باشد و بزرگ بودن آبجکت مورد نیاز بهترین راه حل استفاده از دیتابیسهای NoSqlمثل MongoDbمیباشد.
با این شرایط راه حل چیست؟؟
در چنین پروژه ای شما میباسیت از الگوی CQRS استفاده کنید.
در این سیستم فروشگاهی لایه ی Repository را به دو بخش کلی تقسیم میکنیم که یه بخش شامل Command ها و بخش دیگر شامل Query ها میباشد که تمامی متد ها را بر اساس نوع آنها جدا میکند.زمانیکه اطلاعات در دیتابیس رابطه ای درج،ویرایش یا حذف میشود یه سرویس که اصطلاحا به آن Service Bus میگویند داده های درج شده در دیتابیس رابطه ای را پردازش میکند و آبجکت پیچیده ای که زمان واکشی داده نیاز داریم را به صورت آماده در دیتابیس NoSql ذخیر میکند.در این حالت شما در زمان واکشی داده برای دریافت داده نیاز به دستورات سخت و پیچیده ندارید،همچنین سرعت واکشی داده به دلیل از پیش پردازش شدن به شدت کاهش میابد.
باز هم توجه داشته باشید که پیچیدگی های CQRS به حدی بالاست که اصلا عاقلانه نیست که برای هر پروژه ای از آن استفاده کنید و نیاز است در استفاده از آن به نیاز سیستم خود اشراف کامل داشته باشید.
در انتها چند لینک برای مطالعه بیشتر در مورد این الگو قرار میدهم،امیدوارم مفید واقع شود.
مطالعه بیشتر
مطلبی دیگر از این انتشارات
راهنمای عملی توسعه مبتنی بر آزمون(TDD) در تولید نرمافزار
مطلبی دیگر از این انتشارات
اصول SOLID
مطلبی دیگر از این انتشارات
RabbitMQ چیست ؟ چرا از آن استفاده کنیم ؟