草庐IT

Refactoring

全部标签

C++ 帮助重构一个怪物类

我有C背景,是C++的新手。我有一个基本的设计问题。我有一个类(我称它为“厨师”b/c我遇到的问题似乎与此非常相似,无论是在复杂性和问题方面)基本上都是这样工作的classchef{public:voidprep();voidcook();voidplate();private:charname;chardish_responsible_for;intshift_working;etc...}在伪代码中,这是按照以下方式实现的:intmain{chefmy_chef;kitchen_classkitchen;for(day=0;day这里的厨师职业好像是怪物职业,而且有成为怪物职业的潜

c++ - 删除 C++ 继承中虚拟类成员的代码重复

我现在陷入了一个奇怪的问题。我将编写一个真正简化的版本。classBase{public:virtualintfunc1()=0;virtualintfunc2()=0;protected:intn;};classder1:publicBase{//implementsthevirtualfunctionsofthebaseandusestheprotecteddata//membersofthebase.};classder2:publicBase{//implementsthevirtualfunctionsofthebaseandusestheprotecteddata//mem

c++ - 重构/重写代码还是继续?

我刚刚完成了一段复杂的代码。它可以满足规格要求,满足性能要求等,但是我对此有些担心,正在考虑重写和/或重构它。我应该这样做吗?(花一些时间可能会花在用户实际上会注意到的功能上)?我对代码感到焦虑的原因是:类层次结构很复杂,而且不是很明显有些类没有明确定义的目的(它们做了许多无关的事情)一些类使用其他内部构件(它们被声明为朋友类)绕过抽象层以提高性能,但是我觉得它们通过这样做破坏了封装。一些类泄漏了实现细节(例如,我之前将映射更改为哈希映射,发现自己必须修改其他源文件中的代码才能使更改生效)我的内存管理/池系统有点笨拙,不如透明它们看起来像是重构和清理代码,帮助将来进行维护和扩展的绝佳理

c++ - 如果我使用 "throw;"无异常抛出会发生什么?

这是设置。我有一个调用多个函数的C++程序,所有这些函数都可能抛出相同的异常集,并且我希望每个函数中的异常具有相同的行为(例如,对于异常A,打印错误消息并将所有数据重置为默认值;对于异常B,只需打印;对于所有其他异常,则完全关闭)。似乎我应该能够设置捕获行为来调用一个私有(private)函数,它只是重新抛出错误并执行捕获,如下所示:voidaFunction(){try{/*dosomestuffthatmightthrow*/}catch(...){handle();}}voidbFunction(){try{/*dosomestuffthatmightthrow*/}catch(

c++ - 自动将 .h 拆分(重构)为 header 和实现 (h+cpp)

在编写C++代码时,我通常首先在头文件中编写完整的“实现”代码,然后需要将实现重构到.cpp文件中。这很好,但我发现这个过程很费力,但在其他方面却很容易,所以我想知道是否有任何自动化的方法可以做到这一点?具体来说,我想将.h中的所有类和函数定义转换为声明,并在新的.cpp文件中声明它们。我正在使用xcode,但我愿意接受任何解决方案。 最佳答案 有LazyC++您只需编写一个.lzz文件,它就会为您生成.h和.cpp。我真的很期待C++modules您只需编写.cpp并自动生成导入文件。但是即使Clang已经开始实现模块,我们还得等

c++ - (可视化)C++项目依赖分析

我在我的新工作地点有几个大型项目,它们之间有一组复杂的静态链接库依赖关系。库数量大约为40-50,而且很难确定结构最初是什么意思,完整的依赖关系图上没有明确的文档。有人会推荐什么工具来提取此类数据?据推测,以最简单的方式,如果执行以下操作:定义对应库单元的路径集将其中的所有.cpp/.h文件设置为属于那些编译单元捕获一阶#include依赖树人们将拥有足够的信息来构建map-重构-并重新构建map,直到创建了某种秩序。我注意到http://www.ndepend.com有一些不错的东西,但不幸的是,那只是.NET。我读到一些关于Doxygen能够通过配置完成一些静态依赖分析的内容;有没

MongoDB 设计/重构

我有一个项目(ta-daaa)影响了我的范围。最初是一个跟踪校准工具的简单应用程序(每个工具都有一个每年轮换周期来检查校准),现在也变成了库存跟踪。所以我当前的模型有一些必填字段和一个嵌入式校准文档:{_id:ObjectId("51b0d94c3f72fb89c9000014"),barcode:"H-131887",calibrations:[{_id:ObjectId("51b0d94c3f72fb89c9000015"),cal_date:ISODate("2013-07-03T16:04:57.893Z"),cal_date_due:ISODate("2013-07-03T1

mysql - 非常大的 SQL 查询的问题

问题:我正在创建一个Trac报告,显示在我们图书馆的每个章节的开发周期的每个阶段有多少票。一张工单代表一项工作,通常是一个单独的例程。例如,在第X章的同行评审阶段,即将发布(里程碑)的门票有多少。共有10个发展阶段和47个章节。给定的MySQL查询适用于所有10个开发阶段,但仅适用于一章且长25行,因此所有章节的整个查询超过1200行。Trac给出的错误是KeyError:'numrows'查询变得很大。当直接在MySQL中输入查询时,给出的错误是Outofresourceswhenopeningfile(Errcode:24)(23)问题:重构-这可以做得“更好”吗?sql大师们,有

mysql - 使用连接优化查询

如何使用连接完成查询。我是数据库的新手。这个查询工作正常..但我想让它更坚固$query="SELECTstudent_idFROMstudentsWHEREstudent_idIN(SELECTstudent_idFROMclass_studentsWHEREclass_idIN(SELECTclass_idFROMclass_courseWHEREteacher_id=".$_SESSION['teacher_id']."))";还有其他方法吗 最佳答案 使用IN可以转换为正确的连接:SELECTs.student_idFROM

php - PHP中的PDO,如何改进这个PDO mysql代码

感谢检查。所有有用的答案/评论都已投票。我有以下代码,可以完成工作,但imo效率不高。我认为它效率不高的原因是因为我使用的是fetchAll+循环即使我知道查询将返回1条记录或没有记录。//assumetheusualnewPDO,binding,andexecuteareuphere$myval="somevalue";$res=$stmt->fetchAll(PDO::FETCH_ASSOC);if(!$res){//norecordmatches//BLOCKACODEHERE}else{//foundmatchingrecord(butalwaysgoingtobe1recor