我有一个由其他人创建的项目,其中包含数千个类文件,并且对于任何类的每个引用都明确键入了包名称.看起来代码是逆向工程的.是否有一个很好的Java工具可以重构代码,以便从类引用中删除显式类型的包前缀并将其移动到import语句中.
先感谢您.
编辑:
我想一个例子会有所帮助.我想把进口放在最顶层,我不关心有多少进口.
javax.swing.JButton button1 = new javax.swing.JButton();
Run Code Online (Sandbox Code Playgroud)
想象一下上面的代码,但在成千上万的类文件中成千上万行代码中绝对无处不在.我希望能够删除所有的前缀,只是有一个很好的导入javax.swing.JButton; 在每个类文件的顶部.
是否有一个非玩具工具可以创建整个应用程序的调用图?我并不是指通过逐个方法指向获取图片或绘制调用图.
我需要一个可以通过编程方式访问的调用图,即工具应该以文本模式(例如XML)将其刷新到文件中,或者在内存中构建调用图(这对于大型应用程序来说会成为问题).内置在DB中的调用图会很棒.
静态和动态呼叫图都是需求的; 虽然静态更有趣,但事实是它过于活跃是可以接受的.
到目前为止我尝试过Soot.但是,它甚至无法处理像FreeCol这样的中型项目(Java源代码可用).Soot在该项目上耗尽了1.5GB内存,然后JVM崩溃,如下所述:http://www.sable.mcgill.ca/pipermail/soot-list/2008-July/001828.html
如上所述,有人可以建议生成调用图的工具吗?Java或.NET语言都可以.
我有一个很长的代码库已经存在了一段时间,我试图通过重构来整理它.我想做的一件事是找到我可以转发声明成员的所有标题,而不是包括整个头文件.
这是一个相当费力的过程,我正在寻找一个工具,可以帮助我找出哪些标题包含可以向前声明的成员.
是否有编译器设置可能会发出警告或建议以下代码可以使用前向声明?我正在使用以下编译器icc,gcc,sun studio和HP的aCC
是否有可以完成相同工作的独立工具?
#include "Foo.h"
...//more includes
class Bar {
.......
private:
Foo* m_foo;
};
Run Code Online (Sandbox Code Playgroud) 使用长参数列表创建方法或将参数包装到对象中是否更好(最佳做法是什么)?
我的意思是假设我有一个具有很长属性列表的客户端数据类型,我想一次更新所有属性.做一些像这样的事情会更好
public int Update(int id, string name, string surname, string streetAddress, string streetAddress2, string postcode, string town, string city, string nationality, string age, string gender,string job)
{ }
Run Code Online (Sandbox Code Playgroud)
或者包装对象中的所有属性并执行类似的操作
public int Update(Client client)
{ }
Run Code Online (Sandbox Code Playgroud)
谢谢
有两种主要的重构工具可以为Visual Studio安装,提供C++支持.这两个工具的完整版本是250美元,它们似乎提供类似的功能.他们是:
哪个工具更好?
编辑:我对这些工具的初步评估似乎是Refactor Pro/CodeRush有更多的功能,但偶尔也有很多错误.它似乎并不喜欢宏: http://billy-oneal.com/forums/4-9-2010%2010-31-50%20PM.png 这里的视觉辅助的相同的解释: HTTP:// billy- oneal.com/forums/4-10-2010%201-52-24%20AM.png
编辑2:我认为我喜欢CodeRush而不是Visual Assist,但我不确定我是否可以信任CR.CodeRush似乎在解析一些C++结构时遇到了问题,比如上面的宏.但它的UI是很多更精致.例如:http: //billy-oneal.com/forums/4-10-2010%201-37-12%20AM.png
另一方面,Visual Assist X似乎在C++开发人员中有更大的追随者,而且它的代码分析要好得多.它似乎没有像R一样出错!Pro正在不时制作.
我想在这一点上我只需要使用这两种工具,看看哪一种更有用.但是,如果有人用任何一种工具制作恐怖/成功故事,我仍然很好奇.
我即将开始研究一个涉及重构和修改c&c ++中现有代码的项目.代码是一个膨胀的代码,并且数量巨大.当然,由于代码需要修改,因此我们必须在非常短的时间内开发对代码的理解,因为我们有一些非常紧迫的项目进度表.任何人都可以建议任何有助于实现上述目标的开源工具.总之,我正在寻找的工具可以:
请告诉我任何值得关注的经历,偏好或收藏.
[编辑]想出了上面提供帮助的工具列表.这是清单:
UMLStudio
为您的OO遗留代码创建对象模型是分析,理解和维护它的最佳方法.UMLStudio可以比任何其他CASE工具更快地将C++,Java,CORBA IDL,PHP 5和Ada 95代码转换为OOA和D表示法.
CodeDrawer for C++
The CodeDrawer converts source code to visual based diagrams. Class, struct, and any elements of source code can be shown diagrams. It also shows the logics of a function and a method. The CodeDrawer helps understand source code of your project
Imagix
Reverse engineering and visualization of source code lead to improved program comprehension. Speeds:
Learning Unfamiliar Code
Change Impact …
有谁知道重构上帝对象的最佳方法?
它并不像将它分成许多较小的类那样简单,因为有很高的方法耦合.如果我拿出一种方法,我通常会把所有其他方法拉出去.
我有一个asp.net-mvc网站,其中包含以下文件夹:
我现在想要在另一个.net应用程序(一个Windows控制台应用程序,所以根本不是网络)访问大量的业务逻辑和数据库访问代码和数据,所以我重构尽可能多的东西移除MVC项目和进入解决方案中的其他项目,以便可以与其他解决方案共享代码.
我有两个主要问题;
我的主要问题是我正在努力找到一个放置生成ViewModel的代码的地方,因为我想在我的控制台应用程序中重用这些代码,因为控制台应用程序发送的电子邮件需要相同的数据.视图.
另一个主要问题是,当我的许多实例化我的视图模型的函数以一堆数据库访问代码开始时,我仍然很难看到如何将我的数据库访问代码移出MVC项目,同时仍然有ViewModel.
到目前为止,这里有一些细节和我的过程:
所以移动DomainModel项目很简单(因为那里有许多原始对象,其中包含一些业务逻辑 - 没有关于它的网络).
我尽可能地减少了控制器的数量,并将任何业务逻辑或复杂的数据访问逻辑移到了Models文件夹中.当我试图将模型文件夹移到MVC项目之外时,有些事情破了:
在稀疏控制器时,我有许多不同的控制器动作可以转到模型类并返回我传递回视图的ViewModel.像这样的东西(在我的控制器类中):
public ActionResult ApplicationDetail(int id)
{
AppDetailViewModel applicationViewModel = Model.GenerateAppDetailViewModel(id);
return View(applicationViewModel);
}
Run Code Online (Sandbox Code Playgroud)
所以我的Model文件夹中的文件依赖于ViewModel类.我确实希望集中GenerateAppDetailViewModel()函数,因为它在多个不同的控制器中使用.此外,在我的控制台应用程序(发送电子邮件,我经常想要获取恰好在某个视图上的所有数据,所以我的代码"希望"也利用视图模型..如果我将它移出MVC项目然后我可以重用但我认为有依赖性问题(显然我不需要在我的控制台应用程序中使用SelectListItem,但在其他情况下,它们只是生成视图所需的不同数据的容器对象,我确实要重用)
或另一件破坏的事情是依赖:
System.Web.Mvc
Run Code Online (Sandbox Code Playgroud)
因为我有很多代码:
我想寻找关于打破这种依赖关系的最佳方法的建议,这样我就可以尽可能多地从MVC项目中移出代码以便重用.
问题是,如果我尝试将我的ViewModel代码吸入Model文件夹并进入另一个项目,那么我再次陷入困境,因为ViewModel类有很多依赖性
System.Web.Mvc
由于像SelectListItem这样的东西.
我应该有2个视图模型文件夹(MVC项目中有一个具有特定的system.web.mvc引用,另一个位于不同的项目中吗?).似乎依赖于SelectListItem是导致争用的原因
在我看过的大多数示例中,ViewModes确实依赖于System.Web.Mvc,例如本教程
我看过这些问题:
哪些是相关的,但不确定他们回答我所说的具体的整体重构问题.
c# model-view-controller asp.net-mvc refactoring asp.net-mvc-viewmodel
例如,Android Studio提供了强大的重构功能Rename.我可以用它来改变变量,字段,参数的名称,但是我似乎找不到重命名类型的方法.例如:
LinearLayout layout = (LinearLayout) v.findViewById(....);
// ........
// A bunch of code using `layout` many times
Run Code Online (Sandbox Code Playgroud)
我怎样才能快速重构LinearLayout来RelativeLayout,并将它应用到代码太多的休息吗?我可以为田地做同样的事情吗?
首先,我理解值和引用类型之间的区别 - 这不是那个问题.我在Swift中重写了一些代码,并决定重构一些类.因此,我想我会看到一些类是否有意义作为结构.
内存:我有一些模型类,它们包含非常大的数组,它们的大小不断增长(最终大小未知),并且可能存在数小时.首先,是否存在关于结构的建议大小或绝对大小的指导,因为它存在于堆栈中?
重构使用:由于我正在重构现在的乱七八糟的依赖,我想知道如何改进.视图和视图控制器大多很容易,它是我的模型,它的功能,总是让我希望有更好的例子可以遵循.
WorkerManager:Singleton一次持有一个或两个Workers.一个将始终从传感器记录新数据,另一个将审查存储的数据.视图控制器从中获取Worker引用WorkerManager,并要求Worker显示数据.
Worker:队列中的所有内容,以防止内存访问问题(C数组指针随着它们的增长而不断变化).侦听:侦听Worker侦听新数据,将其发送到一个Processor对象(它创建的),清理数据并将其存储在由C语言持有的C数组中Worker.然后,如果存在有效数据,则Worker告知Analyzer(也由工作者拥有)分析数据并将其存储在其他C数组中以馈送到视图.无论是Processor和Analyzer需要国家知道在过去发生的事情和处理和分析旁边.纯原始数据存储在单独的RecordNSManaged对象中.Reviewer采用Record并使用纯原始数据重新创建所有分析的数据,以便对其进行检查.(分析数据很大,我不想将其存储到磁盘)
现在,我的第二个问题是,可以/应该Processor和Analyzer与结构取代?或者可能是协议Worker?它们不是正常意义上的"对象",只是方便的相关方法组和必要的状态.而且因为每个代码几乎是一千行,我不想把它全部放在一个类,甚至是同一个文件中.
我只是没有很好地理解如何删除我的所有状态,使用纯函数进行在数组上执行的所有复杂数学运算,以及放置它们的位置.
refactoring ×10
c++ ×3
java ×3
c# ×2
.net ×1
architecture ×1
arrays ×1
asp.net-mvc ×1
class ×1
eclipse ×1
god-object ×1
import ×1
ios ×1
packages ×1
struct ×1
swift ×1