在软件开发中,减少类似方法的数量是提高代码可维护性和可扩展性的重要手段。以下是系统性的解决方案:
代码冗余(Code Duplication)指在多个位置存在功能相同或高度相似的代码片段,会导致维护成本增加、BUG修复困难等问题。
// 重构前
function calculateCircleArea(radius: number) {
return Math.PI * radius * radius;
}
function calculateCylinderVolume(radius: number, height: number) {
return Math.PI * radius * radius * height;
}
// 重构后
function calculateBaseArea(radius: number) {
return Math.PI * radius * radius;
}
function calculateCircleArea(radius: number) {
return calculateBaseArea(radius);
}
function calculateCylinderVolume(radius: number, height: number) {
return calculateBaseArea(radius) * height;
}
// 重构前
class OrderService {
public double calculateDiscount(String userType) {
switch(userType) {
case "VIP": return 0.2;
case "Regular": return 0.1;
default: return 0;
}
}
}
// 重构后
interface DiscountStrategy {
double getDiscount();
}
class VIPDiscount implements DiscountStrategy {
public double getDiscount() { return 0.2; }
}
class RegularDiscount implements DiscountStrategy {
public double getDiscount() { return 0.1; }
}
class OrderService {
private DiscountStrategy strategy;
public void setStrategy(DiscountStrategy strategy) {
this.strategy = strategy;
}
public double calculateDiscount() {
return strategy.getDiscount();
}
}
# 重构前
def process_csv(file):
validate(file)
data = parse(file)
save_to_db(data)
send_notification()
def process_json(file):
validate(file)
data = parse(file) # 不同解析逻辑
save_to_db(data)
send_notification()
# 重构后
from abc import ABC, abstractmethod
class FileProcessor(ABC):
def process(self, file):
self._validate(file)
data = self._parse(file)
self._save(data)
self._notify()
def _validate(self, file): pass
@abstractmethod
def _parse(self, file): pass
def _save(self, data): print("Saving to DB...")
def _notify(self): print("Sending email...")
class CsvProcessor(FileProcessor):
def _parse(self, file): print("Parsing CSV...")
class JsonProcessor(FileProcessor):
def _parse(self, file): print("Parsing JSON...")
// 重构前
const users = [
{name: 'Alice', age: 25},
{name: 'Bob', age: 30}
];
function findByName(users, name) {
return users.find(u => u.name === name);
}
function findByAge(users, age) {
return users.find(u => u.age === age);
}
// 重构后
function findBy(users, predicate) {
return users.find(predicate);
}
// 使用示例
findBy(users, u => u.name === 'Alice');
findBy(users, u => u.age > 28);
通过系统性地应用这些方法,可以有效减少代码重复率,提高代码质量。根据具体场景选择合适的方法,通常组合使用多种技术效果最佳。
没有搜到相关的文章