💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ حمیدرضا جلیلی
IProductService
جامعه ASP.NET ایجاد شده در ۲۴ اسفند ۱۴۰۱

Iproductservice یک اینترفیس است که از Iservice ارث بری کرده است و Iservice هم دارای یکسری متد مانند Add Update Find است حالا با کمک متغیری از نوع اینترفیس Iproductservice برای اینکه دوباره کدهای زیادی نزنیم در اینجا Action ‌های که نیاز دارند از این متد‌ها استفاده کنند را به آن اینترفیس ارجاع داده و از متدهای آن استفاده میکنند.

حالا سوال اول اینکه آیا تحلیل من درست هست یا خیر؟

سوال دوم اینکه چرا از خود کلاس یک متغیر ایجاد نکردیم و از نوع اینترفیس یک متغیر ایجاد کرده ایم؟

        #region Fields
        IProductService _productService;

سوال سوم : چرا متد Create در http get از _productService استفاده نکرده است چون به نظر میر سد که باید همانند متد Create در Http post از متد Add آن استفاده میکرده است؟

    public IActionResult Create()
        {
            return View("Edit");
        }
        [HttpPost]
        public IActionResult Create(ProductModel model)
        {
            _productService.Add(model);
            return View("Edit");

        }

پاسخ اول بله به همین دلیله.

در مورد پرسش دوم اینه که با توجه به اصول SOLID و برای اینکه برنامه ما loosely coupled باشه، ما نمیخوایم به یک کلاس concrete وابستگی ایجاد کنیم. برای همین به یک interface که در اصل یک abstraction هست وابستگی ایجاد میکنیم و این رو میذاریم به عهده‌ی dependency injection که خودش کلاسی رو که register کردیم، هر زمان که خواستیم بهمون بده.

پاسخ سوم اینه که توی صفحه‌ی create ما میخوایم یک موجودیت جدید بسازیم بنابر این لازم نیست از دیتابیس چیزی بگیریم بنابراین به سروریس خاصی نیاز نداریم و صرفا یک ویو بدون دیتا نشون میدیم.

اگر پاسخ دوم به اندازه کافی گویا نبود یک بار دیگه ویدیو SOLID و Dependency Injection رو ببینید چون اونجا این مبحث رو مفصلا توضیح میدیم.

محمدرضا میرزایی ۲۷ اسفند ۱۴۰۱، ۰۰:۰۹

خب مگر نباید در Create در دیتابیس رکوردی ایجاد شود پس مگه نباید از متد Add کلاس _ProductService استفاده بشه؟

همانند متد Create در  Http post 

حمیدرضا جلیلی ۲۷ اسفند ۱۴۰۱، ۰۶:۲۷

توی HttpPost بله اما توی HttpGet نه چون ما فقط داریم از سرور اطلاعات دریافت میکنیم و توی این حالت این اطلاعات فقط یک صفحه‌ی خالیست

بهترین پاسخ
محمدرضا میرزایی ۲۰ فروردین ۱۴۰۲، ۱۲:۲۲

تشکر

حمیدرضا جلیلی ۲۱ فروردین ۱۴۰۲، ۰۸:۵۹