بازآرایی یعنی «تغییر ساختار داخلی بدون تغییر رفتار بیرونی». هدفش این است که تغییرِ بعدی ارزان شود، نه اینکه کد «قشنگ» شود.
بوی کد: نشانهها، نه احکام
- تکرار: یک منطق در سه جا کپی شده → استخراج تابع.
- تابع طولانی: چند کار قاطی → شکستن به قدمها.
- شرط تودرتوی عمیق: → نگهبان (early return) و استخراج شرط.
- کلاس خدا: همهچیز میداند → تقسیم مسئولیت.
# قبل: شرط تودرتو
def price(user, cart):
if user is not None:
if user.active:
if cart:
if user.coupon:
return cart.total * 0.8
return cart.total
return 0
# بعد: نگهبان + استخراج
def price(user, cart):
if not (user and user.active and cart):
return 0
if user.coupon:
return cart.total * 0.8
return cart.total
استخراج متد و جابهجایی
قانون: هر بازآرایی کوچک، بعدش تستها سبز. قدمهای بزرگِ «همهچیز را بازنویسی میکنم» بدون تورِ تست، اسمش بازآرایی نیست، قمار است.
الگوها: ابزار، نه مد
Strategy (راهبرد): خانوادهای از الگوریتمهای قابل تعویض — در پایتون معمولاً فقط یک دیکشنریِ نام → تابع است، نه سلسلهمراتب کلاس جاوایی:
def normal_price(amount): return amount
def student_price(amount): return amount * 0.7
def vip_price(amount): return amount * 0.85
STRATEGIES = {"normal": normal_price, "student": student_price, "vip": vip_price}
def checkout(kind, amount):
return STRATEGIES[kind](amount)
Observer (ناظر): «وقتی X شد، همهٔ علاقهمندان باخبر شوند» — در پایتون با لیست callback:
class Store:
def __init__(self):
self._listeners = []
def subscribe(self, callback):
self._listeners.append(callback)
def sell(self, item):
for callback in self._listeners:
callback(item)
Singleton: در پایتون تقریباً همیشه اشتباه است؛ بهجایش از «یک نمونهٔ ماژولسطح» یا تزریق وابستگی استفاده کن. الگویی که در جاوا لازم بود، در پایتون با یک دیکشنری یا تابع حل میشود — آن را تحمیل نکن.
Facade (نما): یک تابعِ ساده روی زیرسیستمِ پیچیده. MVC: جداکردن داده (Model) از نما (View) و کنترل — همان انضباطی که در درس GUI با «جدایی منطق از نما» میبینی.
سنجش فهم — بازآرایی و الگو
۰ از ۲ پاسخ داده شده