- 给你的实体起有意义的名字
- 给你的实体起有意义的名字
- 给你的实体起有意义的名字
- 给你的实体起有意义的名字
- 为常用代码提取函数
- 可能信号/插槽/侦听器/观察者概念适合您。
编辑:重构示例:
假设你的代码是:
void Button1_Click() {
function1();
function2();
function3();
function4();
function5();
}
void Button2_Checked(int variable0) {
if (variable0) {
function1();
function2();
} else {
function1();
function2();
function3();
function4();
function5();
}
}
步骤 0-10 是为所有按钮、功能、
变量,参数(一次只重命名一个实体;为了发帖,我跳过了这个):
void orderPizzaButton_Click() {
requestSalamis();
requestAnchovis();
requestShitake();
requestCheese();
requestGroundMeat();
}
void lasagnePervesityLevel_Changed(int newValue) {
if (newValue <= 0) {
requestCheese();
requestGroundMeat();
} else {
requestSalamis();
requestAnchovis();
requestShitake();
requestCheese();
requestGroundMeat();
}
}
第 11 步是在这些函数中找到共同点,并提取一个新的、可重用的函数
来自他们:
void orderPizzaButton_Click() {
requestStrangeIngredientCombination();
}
void lasagnePervesityLevel_Changed(int newValue) {
if (newValue <= 0) {
requestCheese();
requestGroundMeat();
} else {
requestStrangeIngredientCombination();
}
}
void requestStrangeIngredientCombination() {
requestSalamis();
requestAnchovis();
requestShitake();
requestCheese();
requestGroundMeat();
}
第 12 步是优化您对公共代码的搜索(将其视为一种规范化):
void orderPizzaButton_Click() {
requestStrangeIngredientCombination();
}
void lasagnePervesityLevel_Changed(int newValue) {
if (newValue <= 0) {
requestStandardComponents();
} else {
requestStrangeIngredientCombination();
}
}
void requestStandardComponents() {
requestCheese();
requestGroundMeat();
}
void requestStrangeIngredientCombination() {
requestSalamis();
requestAnchovis();
requestShitake();
requestStandardComponents();
}
虽然在此示例中您似乎没有保存代码,但实际上它通常会。此外,节省代码行在这里不是重要的事情,重要的是减少冗余,因为一旦你决定你的不正常的千层面和奇怪的披萨也应该放辣椒和西尔维斯特史泰龙的形象,你不仅会有代码重复,但是工作重复;最重要的是,有可能忘记代码中某些地方的新功能。当然,这非常糟糕,甚至对业务至关重要。假设您的客户希望他们的千层面上出现西尔维斯特·史泰龙的形象,正如您的营销活动所承诺的那样,然后没有人订购比萨饼,而只有那些订购千层面的人。
存在更多重构和设计,具体取决于实际代码。我真的
建议入手以下书籍。此外,最重要的经验法则:一次一步。只做一次小的重构、编译、测试。
-
重构 - 改进现有代码的设计 由 Addison-Wesley 的 Martin Fowler 撰写
-
C++ 编码标准:101 条规则、指南和 C++ 最佳实践,作者:Herb Sutter、Andrei Alexandrescu(C++ 深度系列),Addison-Wesley
-
Design Patterns: Elements of Reusable Object-Oriented Software 作者 Gamma、Helm、Johnson、Vlissides(通常称为 GoF,代表四人组),再次在 Addison-Wesley 发表