PDA

View Full Version : HttpContextWrapper چه میکند؟



sh_esharif
چهارشنبه 18 شهریور 1394, 12:00 عصر
دوستان عزیز سلام
علت استفاده از HttpContextWrapper در کد زیر چیه؟



HttpContextWrapper context = new HttpContextWrapper(System.Web.HttpContext.Current) ;
context.Session["UserId"] = xId;


و چه فرقی با کد زیر داره؟



var c = System.Web.HttpContext.Current;
c.Session["UserId"] = xId;

ممنون از راهنمایی تون.
منبع خوب برای آموزش چیه؟
ظاهرا چیز خیلی واضحیه و همه بلدن چون هر چی گشتم چیز خاصی پیدا نکردم.

hakim22
پنج شنبه 19 شهریور 1394, 09:04 صبح
همانطور که میدانید ASP MVC Framework یک فریم ورک بر پایه ASP.NET است. یکی از اهداف اصلی در MVC تست پذیر بودن آن است. بسیاری از کلاسها و متدهای MVC همان کلاسها و متدهای ASP هستند. بیشتر کلاسهای ASP یک کلاس بیس به صورت HttpContextBase و ... دارند. بعد یک کلاس به صورت HttpContext از آن ارث بری کرده. در MVC برای استفاده از این کلاسها از Wrapper استفاده میشود. مثلا HttpContextWrapper.

کلاسهای Wrapper نوعی از کلاسهای الگوی Adapter هستند که از یک کلاس ارث بری میکنند و بعضی از قابلیت های آن را پنهان یا به آن قابلیت های جدید اضافه کنند. یکی از اهداف استفاده از wrapper جدا سازی ارتباط مستقیم بین یک کلاس و کلاس مادر آن است. در اینجا مثلا ممکن است کلاس HttpContextتغییراتی داشته باشد ولی چون شما در سورس همیشه از HttpContextWrapper استفاده کرده اید این تغییرات روی کد شما تاثیری نخواهد گذاشت.

در مورد کلاس HttpContextWrapper به طور خاص میتوان گفت تست پذیری را فوق العاده افزایش میدهد. شما میتوانید بجای HttpContext.Current هر مقدار ورودی دیگری قرار دهید (مثلا یک مقداری که قبلا ذخیره کرده اید یا در تست شبیه سازی کرده اید ) و برنامه ی شما کار میکند. دقت کنید که Current فقط به داده های HttpContext اشاره دارد که در همان لحظه از وب دریافت شده اند. در حالی که شما در محیط تست دیگر داده های HttpContext را ندارید و باید خودتان آن را شبیه سای کنید.

در واقع مشکلی پیش نمی آید اگر شما از Wrapper استفاده نکنید چون هر دوی این کلاسها در نهایت از HttpContextBase ارث بری کرده اند. اما شما از MVC استفاده نکرده اید و از ASP بهره برده اید.

خوب است کتاب Pro ASP.NET MVC 5 Platform را مطالعه کنید گرچه برای درک دقیق نحوه ی کار این مکانیزم باید در مورد الگوها و مبانی شی گرایی نیز اطلاعات داشته باشید. همینطور نحوه ی تست کردن در ASP MVC را نیز بررسی کنید.