الگوی Chain of Responsibility، یک زنجیر، از اشیاء متصل شدهی به هم را فراهم میکند که یکی از آنها میتواند درخواست رسیده را راضی کند؛ به عبارتی دیگر به محض دریافت درخواست، آن را پردازش میکند. این الگو اساسا یک جستجوی خطی ( linear search )، برای یک شیء میباشد که میتواند یک درخواست ویژه را handle کند. الگوی chain-of-responsibility، ارتباط با الگوی Chaining دارد که به دفعات در جاوا اسکریپت استفاده شدهاست (jQuery استفادهی گسترد ...
آشنایی
این قسمت از مقاله به ایده اصلی برنامه نویسی تابعی و دلیل وجودی آن خواهد پرداخت. هیچ شکی نیست که بزرگترین چالش در توسعه نرم افزارهای بزرگ، پیچیدگی آن است. تغییرات همیش اجتناب ناپذیر هستند. به خصوص زمانی که صحبت از پیاده سازی امکان جدیدی باشد، پیچیدگی اضافه خواهد شد. در نتیجه منجر به سخت شدن فهمیدن کد میشود، زمان توسعه را بالاتر میبرد و باگهای ناخواسته را به وجود خواهد آورد. همچنین تغییر هر چیزی در دنیای نرم افزار ب ...
قبلاً در سایت جاری در رابطه با پیادهسازی الگوی Context Per Request مطالبی منتشر شده است. در ادامه میخواهیم تمامی درخواستهای خود را اتمیک کنیم. همانطور که قبلاً در این مطلب مطالعه کردید یکی از مزایای الگوی Context Per Request، استفادهی صحیح از تراکنشها میباشد. به عنوان مثال اگر در حین فراخوانی متد SaveChanges، خطایی رخ دهد، کلیهی عملیات RollBack خواهد شد. اما حالت زیر را در نظر بگیرید: _categoryService.AddNewCategory(categ ...
سناریویی وجود دارد که در آن شما میخواهید تنها یک کار را انجام دهید، ولی برای انجام آن n روش وجود دارد. برای مثال قصد مرتب سازی دارید و برای اینکار روشهای مختلفی وجود دارند. برای حل این مساله پیشتر از الگوی طراحی استراتژی استفاده نمودیم.( مطالعه بیشتر در مورد الگوی طراحی استراتژی ) حال به سناریویی برخورد کردیم که بصورت زیر است: میخواهیم یک کار را انجام دهیم ولی برای انجام این کار تنها برخی بخشهای کار با هم متفاوت هستند. برای مثال قصد ...
قبل از مطالعهی این مطلب، حتما الگوی طراحی Factory Method را مطالعه نمایید. همانطور که در الگوی طراحی Factory Method مشاهده شد، این الگو یک عیب دارد، آن هم این است که از کدام Creator باید استفاده شود و مستقیما در کد بایستی ذکر شود. class ConcreteCreator : Creator
{
public override IProduct FactoryMethod(string type)
{
switch (type)
{
case "A": return new Concrete ...
سناریوی زیر را در نظر بگیرید: فرض کنید از شما خواسته شده است تا یک پردازشگر متن را بنویسید. خوب در این پردازشگر با یکسری کاراکتر روبرو هستید که هر کاراکتر احتمالا آبجکتی از نوع کلاس خود میباشد؛ برای مثال آبجکت XYZ که آبجکتی از نوع کلاس A هست و برای نمایش کاراکتر A استفاده میشود. این آبجکتها دارای دو دسته خصیصه هستند: ( مطالعه بیشتر ) خصیصههای ثابت: یعنی همه کاراکترهای A دارای یک شکل مشخص هستند. در واقع مشخصات ذاتی آبجکت میبا ...
فرض کنید در حال پختن یک کیک هستید. ابتدا کیک را میپذید و سپس آن را تزیین میکنید. عملیات پختن کیک، فرآیند ثابتی است و تزیین کردن آن متفاوت. گاهی کیک را با کاکائو تزیین میکنید و گاهی با میوه و غیره. پیش از اینکه سناریو را بیش از این جلو ببریم، وارد بحث کد میشویم. طبق سناریوی فوق، فرض کنید کلاسی بنام Prototype دارید که این کلاس هم از کلاس انتزاعی APrototype ارث برده است. در ادامه یک شیء از این کلاس میسازید و مقادیر مختلف آن را تنظیم کرد ...
این بار مثال را با شیرینی و کیک پیش میبریم. فرض کنید شما قصد پخت کیک و نان را دارید. طبیعی است که برای اینکار یک واسط را تعریف کرده و عمل «پختن» را در آن اعلام میکنید تا هر کلاسی که قصد پیاده سازی این واسط را داشت، «پختن» را انجام دهد. در ادامه یک کلاس بنام کیک ایجاد خواهید کرد و شروع به پخت آن میکنید. خوب احتمالا الان کیک آمادهاست و میتوانید آنرا میل کنید! ولی یک سؤال. تکلیف شخصی که کیک با روکش کاکائو دوست دارد و شمایی که کیک با ر ...
سناریو زیر را در نظر بگیرید: قصد دارید تا در برنامهی خود ارسال پیام از طریق پیامک و ایمیل را راه اندازی کنید. هر کدام از این روشها نیز برای خود راههای متفاوتی دارند. برای مثال ارسال پیامک از طریق وب سرویس یا یک API خارجی و غیره. کاری را که میتوان انجام داد، بشرح زیر نیز میتوان بیان نمود: ابتدا یک Interface ایجاد میکنیم (IBridge) و در آن متد Send را قرار میدهیم. این متد یک پارامتر ورودی از نوع رشته میگیرد و به کمک آن میتوان اقدا ...
سناریوی زیر را در نظر بگیرید: از شما خواسته شده است تا نحوهی ساخت تلفن همراه را پیاده سازی نمایید. شما در گام اول 2 نوع تلفن همراه را شناسایی نمودهاید (Android و Windows Phone). پس از شناسایی، احتمالا هر کدام از این انواع را یک کلاس در نظر میگیرید و به کمک یک واسط یا کلاس انتزاعی، شروع به ساخت کلاس مینمایید، تا در آینده اگر تلفن همراه جدیدی شناسایی شد، راحتتر بتوان آن را در پیاده سازی دخیل نمود. اگر چنین فکر کرده اید باید گفت که 90% ...