我正在挖掘一个庞大的遗留Python类,它有很多方法.我最终将复杂的碎片分成更小的碎片,因此方法的数量会增加更多.我想知道是否有一个工具可以扫描Python代码并为其方法构建某种依赖关系图.
如果至少调用一次,我将方法定义为方法x()的依赖项.y()x()y()
我可以使用这样的工具来隔离(如果可能的话)没有外部依赖关系的类方法的子集(它们的所有依赖关系都是来自同一子集的方法).
我打算将一些功能转移到其他类中,我认为这种方法可以帮助我决定从最初的庞大类中提取哪些部分.
编辑:我真的很喜欢命令行工具.
我正在用C++重构一些代码,我想弃用一些旧的方法.我目前查找所有方法的方法如下所示:
这完全很糟糕.我也尝试过grepping source来获取函数调用的名称,但是我有时会遇到带有不同参数的同名函数的问题,所以我的编译让C++编译器为我解析名称.我已经为C#找到了这个问题,但我的代码库完全用C++实现.
有没有更好的方法来找到C++中类方法或函数的所有调用者?我在Unix系统上使用GCC,但跨平台解决方案将是最高级的.
我正在使用ReSharper来重新计算代码.当我尝试将一段代码移动到该方法时,我收到以下警告:
The extracted code has multiple entry points
这是我计划使用的方法签名:
private void GetRatePlanComponents(ProductPlan productPlan,
ProductRatePlan productRatePlan)
Run Code Online (Sandbox Code Playgroud)
我在网上搜索了解它的含义.但没有太多运气.有人解释一下吗?
供您参考,以下是我尝试转移到单独方法的代码段:
QueryResult productRatePlanChargeQueryResult =
_zuoraService.query(string.Format(@"select Id, Name, IncludedUnits from
ProductRatePlanCharge where ProductRatePlanId = '{0}' and
ChargeModel = 'Overage Pricing'", productRatePlan.Id));
if (productRatePlanChargeQueryResult.size > 0)
{
foreach (ProductRatePlanCharge productRatePlanCharge
in productRatePlanChargeQueryResult.records)
{
string numberOfUnits = productRatePlanCharge.IncludedUnits.ToString();
if (productRatePlanCharge.Name.Equals("Users"))
{
productPlan.NumberofUsers = numberOfUnits;
}
else if (productRatePlanCharge.Name.Equals("Projects"))
{
productPlan.NumberofProjects = numberOfUnits;
}
else if (productRatePlanCharge.Name.Equals("Storage"))
{
decimal volumeOfStorage;
if (decimal.TryParse(productRatePlanCharge.IncludedUnits.ToString(),
out volumeOfStorage))
{
if (volumeOfStorage < …Run Code Online (Sandbox Code Playgroud) 我必须在一个大的,旧的,意大利面条的ASP系统中做一些重要的开发.我已经远离ASP很长一段时间了,我将精力集中在Rails开发上.
我采取的一个基本步骤是使用有意义的名称将页面重构为子函数和函数,这样至少可以很容易地理解@文件的顶部通常会发生什么.
ASP有一个有价值的MVC框架吗?或者至少如何从视图中获取业务逻辑的最佳实践?(我记得在当天做了很多包括 - 仍然是这样做的方式吗?)
我也希望能够对业务逻辑进行一些单元测试,但也许我的要求太多了?
项目中有超过200个ASP脚本,长达数千行;)UGH!
我们可能会选择"重大改写",但在那之前,当我在更换页面时,我想花一点时间来清理意大利面条.
为什么在一行上声明变量是不好的做法?
例如
private String var1, var2, var3
Run Code Online (Sandbox Code Playgroud)
代替:
private String var1;
private String var2;
private String var3;
Run Code Online (Sandbox Code Playgroud) 我的工作中,我有一个非常服务特定功能的一些小模块Python的Web应用程序:session.py,logger.py,database.py,等,并通过"小"我真的不意味着小; 这些文件中的每一个目前包括大约3-5行代码,或者最多可能包含10行代码.我可能有一些导入和一个类定义或两个.我想知道,有什么理由我应该或不应该将这些合并到一个模块中,类似于misc.py什么?
我的想法是,拥有单独的模块有助于代码清晰度,稍后,如果这些模块有可能增长到超过10行,我将不会感到如此糟糕.但另一方面,拥有一堆只有几行的文件似乎是一种浪费!并且多文件与单文件方法之间的资源使用有任何显着差异吗?(当然,我远远不能担心资源使用问题,但我忍不住要求......)
我查看过是否曾经问过这个问题,并没有看到任何特定于Python的内容,但如果它实际上是重复的,我会很感激被指向正确的方向.
在重构PostgreSql函数时(更具体地说:在搜索'unused'函数时),有一个函数可以在函数定义中搜索特定的字符串.
有谁知道这是否是最好的方法(尝试'grep' - 搜索函数定义)还是有其他方法可用?
如何实现此功能?
在重构字段时,eclipse中的默认行为是仅重命名字段,使访问器方法名称不一致.
按Alt+Shift+R两次显示"重命名对话框",我可以选择是否应重命名访问者(作为两个单独的选项).这减轻了手动重命名访问器的痛苦,但仍然非常不理想,包括按下3个快捷方式,而不是使用就地重命名,加上我平常的健忘...... :)
我想不出为什么我不希望我的重构保持一致的原因,那么有没有办法让访问者重命名默认行为?只要有效,我就可以调整神秘的设置并设置模糊的标志.
谢谢
我在一个大型平台项目上工作,支持大约10个使用我们代码的产品.
到目前为止,所有产品都使用了我们平台的全部功能:
- 从数据库中检索配置数据
- 远程文件系统访问
- 安全授权
- 基本逻辑(我们付费提供的东西)
对于新产品,我们被要求在没有平台带来的基础设施的情况下支持较小的功能子集.我们的架构很旧(从2005年左右开始编码),但相当稳固.
我们相信我们可以在我们现有的课程中使用DI来做到这一点,但估计这样做的时间从5到70周不等,取决于你与谁交谈.
有很多文章告诉你如何做DI,但我找不到任何告诉你如何以最有效的方式重构DI?是否有工具可以执行此操作而不必通过30.000行代码并且必须按CTRL + R来移除接口并将它们添加到构造函数中太多次?(如果有帮助,我们有resharper)如果没有,你发现什么是快速实现这一目标的理想工作流程?
c# refactoring dependencies dependency-injection code-injection
我写了类似的东西来指定提示的默认值.
$defaultValue = 'default'
$prompt = Read-Host "Press enter to accept the default [$($defaultValue)]"
if ($prompt -eq "") {} else {
$defaultValue = $prompt
}
Run Code Online (Sandbox Code Playgroud)
可以进一步缩短吗?
这是我的尝试.
$defaultValue = 'default'
$prompt = Read-Host "Press enter to accept the default [$($defaultValue)]"
if (!$prompt -eq "") {$defaultValue = $prompt}
Run Code Online (Sandbox Code Playgroud)
我想要一个单行,所以在那之前我会坚持接受答案.
Nb $defaultValue应独立于一个衬管存放.与上面的例子类似.
我接受了答案,它引导我找到我想要的解决方案.
$defaultValue = 'default'
if (($result = Read-Host "Press enter to accept default value $defaultValue") -eq '') {$defaultValue} else {$result}
Run Code Online (Sandbox Code Playgroud)
对于那些问你原因的人.原因是因为跟随我的人眼睛更容易.在不牺牲清晰度的情况下,总是更少.恕我直言.
编辑;
而不是一行,也许我应该说一个短语?我添加了这个编辑澄清,而我看到的一些答案使用的是分号.
refactoring ×10
c# ×2
python ×2
.net ×1
asp.net-mvc ×1
c ×1
c#-3.0 ×1
c++ ×1
coding-style ×1
conventions ×1
dependencies ×1
eclipse ×1
function ×1
java ×1
module ×1
postgresql ×1
powershell ×1
resharper ×1