🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۵ میثم
پیاده سازی سبد خرید
مهرداد سامی حل شده توسط مهرداد سامی

استاد سلام خسته نباشید

من دارم برای فروشگاهم که بصورت api هستش سبد خرید ایجاد میکنم و میخوام از دیزاین پترن دکریتور استفاده کنم به مشکل خورده   

من کلاسی دارم برای اضافه کردن محصول به سبد خرید و همچنین حذف و یا افزایش تعداد و گرفتن سبد خرید 

حالا برام سوال شده که چطور از این دیزاین پترن استفاده کنم ؟ ممنون میشم توضیحی در مورد این کار بدید. 

سلام و احترام

میثم جان بی زحمت کدهاتون بزا با هم یه بررسی کنیم تا بهتونم کمکت کنم

امیر صالحی ۰۱ اردیبهشت ۱۴۰۰، ۰۵:۱۵

سلام 

 

ممنون میشم مشکلتون رو دقیقتر بفرمایید و به همراه کدهایی که نوشتید برامون ارسال کنید.

مهرداد سامی ۰۱ اردیبهشت ۱۴۰۰، ۰۵:۴۵

ممنون استاد و همچنین امیر جان مشکلم حل شد

فقط ی سوال دیگه برام پیش اومده توی لاراول ما میتونیم یک فساد رو بسازیم و از فساد اون کلاسی که ایجاد میکنیم استفاده کنیم

به فرض اگر کلاسی تحت عنوان کارت داشته باشیم و همچنین کلاس برای محاسبه هزینه پست و برای هرکدوم از این کلاس‌ها یک فساد بسازیم و بخوایم از دیزاین پترن دکریتور استفاده کنیم چطوری نمونه‌ها رو پاس بدیم به کانسترکتور کلاس‌ها در حالی که بصورت استاتیک داریم کلاس‌ها رو صدا میکنیم ؟؟ 

آیا میتونیم تمامی متود‌های دیگه کلاس هارو از فساد استفاده کنیم و بصورت استاتیک صدا بزنیم و زمانی که میخوایم هزینه نهایی رو محاسبه کنیم و از دکریتور استفاده کنیم از کلاس‌ها نمونه جدید بسازیم ؟؟ این راه حل درسته یا راه حل دیگه ای هست ؟

عذر میخوام این رو اینجا مطرح میکنم میدونم دوره ای که دارم پرسش مطرح میکنم در اون php هستش اما برام سوال شده ممنون میشم جواب بدین

میثم ۰۱ اردیبهشت ۱۴۰۰، ۱۳:۵۸

سلام و احترام

facade توی لاراول از همون مجیک متد __callstatic استفاده میکنه و به عنوان خروجی تو این متد به شما یه instanceی از همون کلاس رو بهت میده، شما میتونی از همون instance استفاده کنی برای این دیزاین پترن، مثلا یه متد بسازی به اسم getInstance که static هستش و صداش بزنیو نمونه رو ازش بگیری

امیر صالحی ۰۲ اردیبهشت ۱۴۰۰، ۱۶:۴۰

سلام 

 

ببینید دیزاین پترن فساد در مواردی استفاده میشه که شما میخواید برای سرویس‌های پیچیده‌ای که دارید یک اینترفیس ساده داشته باشید، مثلا فرض کنید شما یک سرویس داریم به نام Cost که کارش محاسبه کردن همه هزینه‌ها هستش، مثل هزینه حمل‌ونقل یا مالیات و یا هر موضوع دیگه .. حالا در کنار این شما میخواید یک سرویس هم داشته باشید که کد تخفیف رو براتون محاسبه کنه و اعمال کنه روی سبدخریدتون .. در واقع الان شما ۲ تا سرویس مجزا دارید که قرار هستش با همدیگه یک سرویس بزرگتر رو تشکیل بدن،‌که این سرویس بزرگتر کارش این هست که کلا سبد خرید و پرداخت رو براتون هندل کنه،‌ مهم نیست این ۲ سرویس رو به چه صورت نوشتید ولی به این صورت هستش که شما میاید و برای استفاده از این ۲ سرویس کنار همدیگه اول میرید مثل سبدخرید رو حساب میکنید با هزینه‌هاش ,‘,, بعد میاید داخل سرویس کد تخفیف مقدار اون رو هم حساب میکنید و بعد مقدار کد تخفیف رو از سبد خریدتون کم میکنید .. در واقع زمانی که شما میخواید فردی را بفرستید برای پرداخت چند تا کلاس رو باید صدا بزنید و یه مقدار کارای محاسباتی انجام بدید و در نهایت فرد را بفرستید برای پرداخت .. دیزاین پترن فساد اینجا استفاده میشه که ایدش به اینصورت هستش که اگر کسی بخواد از این ۲ سرویس کنار هم استفاده کنه چون ساختار پیچیده‌ای داره پس طبیعتا استفاده از اون سخت خواهد بود، موردی که این دیزاین پترن مطرح میکنه اینه که شما باید برای این اینترفیس (نحوه استفاده) پیچیده باید یک اینترفیس ساده طراحی کنید که مثلا فقط از یک کلاس استفاده کنید و از اون کلاس فقط یک متد صدا بزنید و همه این کارارو خودش انجام بده ..در واقع سرویس‌های پیچیده‌رو میاره کنار همدیگه و به شما یک اینترفیس خیلی ساده میده که مثلا فقط یک متد از یک کلاس رو صدا میزنید و اون میاد سبد خرید رو حساب میکنه .. بعد میاد کد تخفیف رو هم حساب میکنه و بعد میاد ریدارکت میکنه به صفحه پرداخت.

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

بهترین پاسخ
مهرداد سامی ۰۳ اردیبهشت ۱۴۰۰، ۱۲:۰۵