code-refactor
2
总安装量
1
周安装量
#64343
全站排名
安装命令
npx skills add https://github.com/u9401066/copilot-capability-manager --skill code-refactor
Agent 安装分布
openclaw
1
opencode
1
cursor
1
claude-code
1
gemini-cli
1
Skill 文档
ç¨å¼ç¢¼éæ§æè½
æè¿°
主å嵿¸¬ä¸¦å·è¡ç¨å¼ç¢¼éæ§ï¼ç¶æ DDD æ¶æ§åç¨å¼ç¢¼å質ã
è§¸ç¼æ¢ä»¶
- ãéæ§éæ®µç¨å¼ç¢¼ãããrefactorã
- ãéåæªæ¡å¤ªé·äºã
- ãæ¨¡çµåãããæåã
- 主å觸ç¼ï¼åµæ¸¬å°ç¨å¼ç¢¼è¶ éé¾å¼æ
æ ¸å¿åå
ð ä¾ææ²æ³ç¬¬ 7.3 æ¢ã主åéæ§ååã
鿧䏿¯æ¹å¤©æå°ï¼èæ¯æçºçå°æ¥å¿«è·
æ¯æ¬¡æäº¤é½æè©²æ¯ä¸æ¬¡æ´ä¹¾æ·¨
é¾å¼è¨å®
ð é·åº¦é¾å¼
| é¡å | è¦å | å¼·å¶éæ§ |
|---|---|---|
| æªæ¡ | > 200 è¡ | > 400 è¡ |
| é¡å¥ | > 150 è¡ | > 300 è¡ |
| 彿¸ | > 30 è¡ | > 50 è¡ |
| ç®éæªæ¡æ¸ | > 10 å | > 15 å |
ð è¤é度é¾å¼
| ææ¨ | è¦å | å¼·å¶éæ§ |
|---|---|---|
| åè¤é度 | > 10 | > 15 |
| å·¢çæ·±åº¦ | > 3 層 | > 4 層 |
| 忏æ¸é | > 4 å | > 6 å |
| ä¾è³´æ¸é | > 5 å | > 8 å |
éæ§æ¨¡å¼åº«
1ï¸â£ Extract Methodï¼æåæ¹æ³ï¼
è§¸ç¼æ¢ä»¶ï¼å½æ¸éé·ãéè¤é輯
# Before
def process_order(order):
# é©èè¨å® (10 è¡)
if not order.items:
raise ValueError("Empty order")
if order.total < 0:
raise ValueError("Invalid total")
# ... æ´å¤é©è
# è¨ç®å¹æ ¼ (15 è¡)
subtotal = sum(item.price * item.qty for item in order.items)
tax = subtotal * 0.05
total = subtotal + tax
# ... æ´å¤è¨ç®
# å²åè¨å® (10 è¡)
# ...
# After
def process_order(order):
self._validate_order(order)
total = self._calculate_total(order)
self._save_order(order, total)
def _validate_order(self, order):
"""é©èè¨å®æææ§"""
if not order.items:
raise ValueError("Empty order")
# ...
def _calculate_total(self, order) -> Decimal:
"""è¨ç®è¨å®ç¸½éé¡ï¼å«ç¨
ï¼"""
subtotal = sum(item.price * item.qty for item in order.items)
return subtotal * Decimal("1.05")
2ï¸â£ Extract Classï¼æåé¡å¥ï¼
è§¸ç¼æ¢ä»¶ï¼é¡å¥è·è²¬éå¤ãè¶ é 150 è¡
# Before: User é¡å¥å
å«å¤ªå¤è·è²¬
class User:
def __init__(self, name, email, ...):
self.name = name
self.email = email
self.address_line1 = ...
self.address_line2 = ...
self.city = ...
self.postal_code = ...
def validate_email(self): ...
def format_address(self): ...
def calculate_shipping(self): ...
# After: æå Address å¼ç©ä»¶
@dataclass(frozen=True)
class Address:
"""å°åå¼ç©ä»¶"""
line1: str
line2: str | None
city: str
postal_code: str
def format(self) -> str:
return f"{self.line1}\n{self.city} {self.postal_code}"
class User:
def __init__(self, name: str, email: Email, address: Address):
self.name = name
self.email = email
self.address = address
3ï¸â£ Replace Conditional with Polymorphismï¼å¤æ å代æ¢ä»¶ï¼
è§¸ç¼æ¢ä»¶ï¼å¤§é if-elif-else æ switch
# Before: æ¢ä»¶å°ç
def calculate_shipping(order):
if order.shipping_type == "standard":
return order.weight * 10
elif order.shipping_type == "express":
return order.weight * 25 + 50
elif order.shipping_type == "overnight":
return order.weight * 50 + 100
elif order.shipping_type == "international":
# è¤éè¨ç®...
pass
# After: çç¥æ¨¡å¼
class ShippingStrategy(ABC):
@abstractmethod
def calculate(self, order) -> Decimal: ...
class StandardShipping(ShippingStrategy):
def calculate(self, order) -> Decimal:
return order.weight * 10
class ExpressShipping(ShippingStrategy):
def calculate(self, order) -> Decimal:
return order.weight * 25 + 50
# 使ç¨
shipping_strategies = {
"standard": StandardShipping(),
"express": ExpressShipping(),
# ...
}
cost = shipping_strategies[order.shipping_type].calculate(order)
4ï¸â£ Introduce Parameter Objectï¼åæ¸ç©ä»¶ï¼
è§¸ç¼æ¢ä»¶ï¼åæ¸è¶ é 4 å
# Before: 忏éå¤
def create_user(
name: str,
email: str,
phone: str,
address_line1: str,
address_line2: str,
city: str,
postal_code: str,
country: str,
):
...
# After: 使ç¨åæ¸ç©ä»¶
@dataclass
class CreateUserCommand:
name: str
email: str
phone: str
address: Address
def create_user(command: CreateUserCommand):
...
5ï¸â£ Split Moduleï¼æåæ¨¡çµï¼
è§¸ç¼æ¢ä»¶ï¼ç®éè¶ é 10 åæªæ¡
# Before
src/Domain/
âââ User.py
âââ Order.py
âââ Product.py
âââ Payment.py
âââ Shipping.py
âââ Review.py
âââ Coupon.py
âââ Notification.py
âââ ... # 太å¤äºï¼
# After: æåé åæå
src/Domain/
âââ Identity/
â âââ User.py
âââ Ordering/
â âââ Order.py
â âââ Payment.py
âââ Catalog/
â âââ Product.py
â âââ Review.py
âââ Promotion/
â âââ Coupon.py
âââ Communication/
âââ Notification.py
DDD æ¶æ§å®è·
éæ§æå¿ é æª¢æ¥æ¯å¦éå DDD ååï¼
â 常è¦éè¦
# éè¦ 1: Domain 層ä¾è³´ Infrastructure
# Domain/Services/OrderService.py
from infrastructure.database import db # â ç¦æ¢ï¼
# éè¦ 2: Presentation ç´æ¥åå Domain
# Presentation/API/routes.py
from domain.repositories import UserRepository # â æéé Application
# éè¦ 3: Entity å
嫿ä¹
åé輯
class User:
def save(self): # â æå¨ Repository
db.session.add(self)
â æ£ç¢ºä¾è³´æ¹å
Presentation â Application â Domain
â
Infrastructure
éæ§æµç¨
1ï¸â£ 嵿¸¬é段
ð 嵿¸¬å°éæ§éæ±ï¼
- æªæ¡ï¼`src/domain/services/order_service.py`
- åé¡ï¼æªæ¡é·åº¦ 342 è¡ï¼è¶
é 200 è¡è¦åé¾å¼ï¼
- è¤é度ï¼åè¤é度 12ï¼è¶
é 10 è¦åé¾å¼ï¼
2ï¸â£ åæé段
ð åæçµæï¼
- `process_order()` 彿¸ 85 è¡ï¼å»ºè°æå
- ç¼ç¾ 3 èéè¤é輯ï¼å»ºè°æå
- èå¥åº 2 åé±èç Value Object
3ï¸â£ è¦åéæ®µ
ð éæ§è¨ç«ï¼
1. æå `OrderValidator` é¡å¥
2. æå `PricingCalculator` æå
3. å»ºç« `OrderStatus` Value Object
4. æ´æ°æ¸¬è©¦ç¢ºä¿è¦è
4ï¸â£ å·è¡é段
ð§ å·è¡éæ§ï¼
- [x] å»ºç« `OrderValidator` é¡å¥
- [x] é·ç§»é©èé輯
- [x] æ´æ°æ¸¬è©¦
- [x] ç¢ºèªæ¸¬è©¦éé
- [ ] æå `PricingCalculator`
- [ ] ...
5ï¸â£ é©èéæ®µ
â
鿧宿ï¼
- 測試ï¼å
¨é¨ééï¼42/42ï¼
- è¦èçï¼85%ï¼+3%ï¼
- è¤é度ï¼8ï¼-4ï¼
- æ¶æ§ï¼ç¬¦å DDD â
主å建è°ç¯æ¬
ç¶åµæ¸¬å°éè¦éæ§æï¼AI æä¸»å建è°ï¼
ð¡ **éæ§å»ºè°**
嵿¸¬å° `order_service.py` å·²é 250 è¡ï¼å»ºè°é²è¡æ¨¡çµåï¼
### å»ºè°æåæ¹æ¡
| æ°æªæ¡ | å
§å®¹ | è¡æ¸ |
|--------|------|------|
| `order_validator.py` | è¨å®é©èé輯 | ~50 è¡ |
| `pricing_calculator.py` | 广 ¼è¨ç®é輯 | ~60 è¡ |
| `order_service.py` | æåç·¨æ | ~80 è¡ |
### é ææç
- â
å®ä¸è·è²¬åå
- â
æ´ææ¸¬è©¦
- â
éä½èªç¥è² è·
æ¯å¦è¦æå·è¡éåéæ§ï¼
èå ¶ä» Skills æ´å
| Skill | æ´åæ¹å¼ |
|---|---|
code-reviewer |
å¯©æ¥æè§¸ç¼éæ§å»ºè° |
test-generator |
éæ§åå çææ¸¬è©¦ |
ddd-architect |
確ä¿éæ§ç¬¦å DDD |
memory-updater |
è¨ééæ§æ±ºç |