💢دیزاین پترن Facade در Golang
🫶یکی از دیزاین پترن های جذاب و کاربردی، پترن Facade! شاید اسمش یه کم شیک به نظر بیاد، ولی قول میدم که خیلی کاربردیه و کارمون رو راحتتر میکنه.
🔹فسید Facade چیه؟
فرض کن جلوی یه ساختمون خیلی شیک و بزرگ وایسادی، ولی لازم نیست بری داخلش و همه اتاقاشو ببینی. فقط کافیه از بیرون، نمای ساده و مرتبش رو ببینی و کارتو راه بندازی. پترن Facade دقیقاً همینه! یه رابط کاربری ساده میده که دیگه لازم نباشه با پیچیدگیهای سیستم درگیر بشی.
✅چرا باید ازش استفاده کنیم؟
دو تا اصل مهم دنیای کدنویسی اینجا برامون روشنتر میشه:
1️⃣ KISS (همه چی ساده باشه)
2️⃣ DRY (تکرار نکن)
وقتی از Facade استفاده میکنی، پیچیدگیهای پشت پرده سیستم رو قایم میکنی و فقط چیزی که کاربر (یا حتی خودت!) نیاز داری رو نشون میدی. کدت مرتبتر، قابل نگهداریتر و قابلفهمتر میشه.
🔴ی مثال ساده: اتصال به دیتابیس
فرض کن میخوای به دیتابیس وصل بشی، کوئری بزنی و قطع کنی. بدون Facade اینجوریه:
type Database struct {
DatabaseConnection *sql.DB
}
func (db *Database) Connect() {
// کد اتصال
}
func (db *Database) Query() {
// کد کوئری
}
func (db *Database) Disconnect() {
// قطع اتصال
}
// استفاده
var db Database
db.Connect()
db.Query()
db.Disconnect()
ولی با Facade، همه اینا تو یه دونه تابع جمع میشه:
type DatabaseFacade struct {
Database *Database
}
func (dbf *DatabaseFacade) ExecuteQuery() {
dbf.Database.Connect()
dbf.Database.Query()
dbf.Database.Disconnect()
}
// استفاده
var dbf DatabaseFacade
dbf.ExecuteQuery()
🔸کاربردهای دیگه:
کار با فایلها
ارتباط با API
راهاندازی وبسرور
مدیریت سفارشهای فروشگاه آنلاین
🔺فسید Facade مثل یه شمشیر دولبهست. اگه زیادی سادهسازی کنی یا بخوای همه کارها رو تو یه struct و متدهاش بذاری، ممکنه یه ساختار پیچیده (God Object) بسازی که خودش یه مشکل جدیده.
✅جمعبندی:
دیزاین پترن Facade، یه ابزار فوقالعاده برای سادهسازی و مرتب کردن کدهاتونه. اما همونطور که هر چیزی حد داره، از این پترن هم فقط وقتی استفاده کن که به درد بخوره و لازم باشه.
شما چطور از Facade استفاده کردید تجربههاتون رو تو کامنتها بگید.
#الگوی_طراحی #Facade #گو #گولنگ #Go #Golang #KISS #DRY