我的代码很乱.不可否认,我自己写了一年 - 一年前.它没有得到很好的评论,但它也不是很复杂,所以我可以理解它 - 只是不足以知道从哪里开始重构它.
我违反了过去一年中我读过的所有规则.有些职责有多个职责,有间接访问(我忘记了这个术语 - 类似的东西foo.bar.doSomething()),就像我说的那样评论不好.最重要的是,它是游戏的开始,所以图形与数据耦合,或者我试图解耦图形和数据的地方,我制作数据public以便图形能够访问数据需要...
这是一个巨大的混乱!我从哪里开始?你会如何开始这样的事情?
我目前的方法是获取变量并将它们切换为私有,然后重构破坏的碎片,但这似乎不够.请建议其他策略来浏览这个烂摊子并把它变成干净的东西,以便我可以继续我离开的地方!
两天后更新:我一直在绘制类似UML的图表,并沿途捕捉一些"低挂水果".我甚至发现了一些代码是新功能的开始,但是当我试图减少一切时,我已经能够删除这些位并使项目感觉更清洁.在绑定我的测试用例之前,我可能会尽可能地进行重构(当然,只有那些100%肯定不影响功能的东西!),所以我不必重构测试用例.改变功能.(你认为我做得对吗,或者你认为,我更容易吸吮它并先写下测试吗?)
请投票选出最佳答案,以便我公平地标记!您也可以随意添加自己的答案,还有空间给您!我会再给它一天左右,然后可能将最高投票的答案标记为已接受.
感谢迄今为止做出回应的所有人!
2010年6月25日:我发现了一篇博文,它直接回答了那个似乎对编程有很好掌握的人的问题:(或者,如果你读了他的文章,可能不会:))
为此,当我需要重构代码时,我做了四件事:
- 确定代码的用途是什么
- 绘制所涉及的类的UML和动作图
- 四处寻找合适的设计模式
- 确定当前类和方法的更清晰的名称
我正在尝试扫描无线网络并在网上找到这个有用的来源.不幸的是它没有用,我不明白为什么.我的问题是,我不能等待10分钟的结果 - 我需要它们在几秒钟内,并考虑设置布尔变量等待假一旦得到结果....好吧,它运行永远..看起来没什么收到的.任何的想法 ?谢谢.
// -- Sample WiFi implementation - http://groups.google.com/group/android-developers/browse_thread/thread/f722d5f90cfae69
IntentFilter i = new IntentFilter();
i.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context c, Intent i){
// Code to execute when SCAN_RESULTS_AVAILABLE_ACTION event occurs
mWifiManager = (WifiManager) c.getSystemService(Context.WIFI_SERVICE);
wireless = mWifiManager.getScanResults(); // Returns a <list> of scanResults
waiting = false;
}
}
,i);
// -- End Wifi Sample
mWifiManager.startScan();
while (waiting) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("PROJECT1","Wifi WAITING");
}
Run Code Online (Sandbox Code Playgroud) 我有类似的领域模型
@OneToMany(targetEntity=adv.domain.City.class...)@OneToMany(targetEntity=adv.domain.Distinct.class)我的目标是当用户在浏览器中按删除按钮时删除不同.在该控制器获得不同的id并将其传递给业务层.其中方法DistinctService.deleteDistinct(Long distinctId)应该委派给DAO层.
所以我的问题是在哪里放置安全限制以及实现它的最佳方法是什么.我想确定我删除了真实用户的不同,即城市的真正所有者,而城市是不同的真正所有者.因此,没有人可以使用像localhost/deleteDistinct/5这样的简单URL删除所有者的ditinct.
我可以从我的控制器中的httpSession获取用户并将其传递给商务层.
之后,我可以获得该用户的所有城市并对其进行评估以确定,即citie.id == distinct.city_id,然后删除distinct.
但在我看来这很荒谬.
我也可以写这样的SQL查询...
delete from
t_distinct
where
t_distinct.city_id in (
select
t_city.id
from
t_city
left join t_user on t_user.id = t_city.owner_id
where
t_user.id = ?
)
and t_distinct.id = ?
Run Code Online (Sandbox Code Playgroud)
那么添加这样的限制的最佳做法是什么.
我正在使用Hibernate,Spring,Spring MVC ..
谢谢
我有一个每20秒刷新一次的页面,我需要知道它何时刷新,当你因某些原因刷新时,DocumentCompleted事件不会触发.有任何想法吗?
我已经开始使用CodeIgniter,但我无法理解一个人的想法.如何将一个类加载到另一个类?
$this->load->library("hello_world");
Run Code Online (Sandbox Code Playgroud)
这不行?
我的类 - > load - > hello_world类
class myclass {
function test() {
$this->load->library("hello_world");
$this->hello_world->hello();
}
}
Run Code Online (Sandbox Code Playgroud)
消息:未定义的属性:myclass :: $ load
我想在Java中绘制图形(节点和边).但是,由于我不知道如何去做,我想在开始之前先给出一些建议.
我该怎么做?
使用Graphics2D包,对吗?
节点的标签怎么样?我应该使用drawString之类的东西并手动处理所有"居中"或为此创建一个JLabel吗?我可以在Graphics2D环境中放置JLabel吗?
我搜索过但没有找到任何简单的实现.如果您知道其中一个,请在答案中提供链接.
编辑:我正在寻找的解决方案应该能够删除节点,拖动节点,编辑标签,创建节点,所有这些都与鼠标事件.
谢谢.
在一个特定的问题,一个自我回答和评论之后,我想了解它是否是一个正确的解决方案,解决方法/黑客或者只是完全错误.
具体来说,我重写了代码:
T x = ...;
if (*reinterpret_cast <int*> (&x) == 0)
...
Run Code Online (Sandbox Code Playgroud)
如:
T x = ...;
if (*reinterpret_cast <volatile int*> (&x) == 0)
...
Run Code Online (Sandbox Code Playgroud)
用volatile指针的限定符.
让我们假设在我的情况下对待T是int有道理的.这是通过volatile引用解决指针别名问题吗?
供参考,来自规格:
[注意:volatile是对实现的暗示,以避免涉及对象的激进优化,因为对象的值可能会被实现无法检测到的方式更改.有关详细语义,请参见1.9.一般来说,volatile的语义在C++中与在C中的相同. - 最后的注释]
编辑:
上面的代码确实至少在GCC 4.5上解决了我的问题.
myclass 是我写的一个C++类,当我写的时候:
myclass x;
cout << x;
Run Code Online (Sandbox Code Playgroud)
我如何输出10或者20.2像一个integer或一个float值?
在我的代码的某些部分,我需要这样的东西:
$product_type = $product->type;
$price_field = 'field_'.$product_type.'_price';
$price = $product->$$price_field;
Run Code Online (Sandbox Code Playgroud)
换句话说,我需要一种KVC - 意味着通过运行时生成的字段名称来获取对象字段.我只需要扩展一些现有的系统并保持字段命名约定,所以不要建议我改变字段名称.
我知道这样的东西适用于数组,当你可以通过以下方式轻松实现:
$price = $product[$price_field_key].
Run Code Online (Sandbox Code Playgroud)
所以我可以动态生成数组的键.但是如何为对象做到这一点?请帮助我,因为谷歌给了我数组等结果的河...谢谢