问题列表 - 第28245页

你如何重构一个庞大的混乱代码库?

我的代码很乱.不可否认,我自己写了一年 - 一年前.它没有得到很好的评论,但它也不是很复杂,所以我可以理解它 - 只是不足以知道从哪里开始重构它.

我违反了过去一年中我读过的所有规则.有些职责有多个职责,有间接访问(我忘记了这个术语 - 类似的东西foo.bar.doSomething()),就像我说的那样评论不好.最重要的是,它是游戏的开始,所以图形与数据耦合,或者我试图解耦图形和数据的地方,我制作数据public以便图形能够访问数据需要...

这是一个巨大的混乱!我从哪里开始?你会如何开始这样的事情?

我目前的方法是获取变量并将它们切换为私有,然后重构破坏的碎片,但这似乎不够.请建议其他策略来浏览这个烂摊子并把它变成干净的东西,以便我可以继续我离开的地方!


两天后更新:我一直在绘制类似UML的图表,并沿途捕捉一些"低挂水果".我甚至发现了一些代码是新功能的开始,但是当我试图减少一切时,我已经能够删除这些位并使项目感觉更清洁.在绑定我的测试用例之前,我可能会尽可能地进行重构(当然,只有那些100%肯定不影响功能的东西!),所以我不必重构测试用例.改变功能.(你认为我做得对吗,或者你认为,我更容易吸吮它并先写下测试吗?)

请投票选出最佳答案,以便我公平地标记!您也可以随意添加自己的答案,还有空间给您!我会再给它一天左右,然后可能将最高投票的答案标记为已接受.

感谢迄今为止做出回应的所有人!


2010年6月25日:我发现了一篇博文,它直接回答了那个似乎对编程有很好掌握的人的问题:(或者,如果你读了他的文章,可能不会:))

为此,当我需要重构代码时,我做了四件事:

  1. 确定代码的用途是什么
  2. 绘制所涉及的类的UML和动作图
  3. 四处寻找合适的设计模式
  4. 确定当前类和方法的更清晰的名称

language-agnostic oop refactoring

40
推荐指数
5
解决办法
6096
查看次数

Android扫描Wifi网络

我正在尝试扫描无线网络并在网上找到这个有用的来源.不幸的是它没有用,我不明白为什么.我的问题是,我不能等待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)

android wifi android-wifi

4
推荐指数
1
解决办法
2万
查看次数

如何防止未经授权的用户删除我的域模型中的对象?

我有类似的领域模型

  • 1)用户.每个用户都有很多城市.@OneToMany(targetEntity=adv.domain.City.class...)
  • 2)城市.每个城市都有很多地区 @OneToMany(targetEntity=adv.domain.Distinct.class)
  • 3)Distintc

我的目标是当用户在浏览器中按删除按钮时删除不同.在该控制器获得不同的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 ..

谢谢

java orm spring hibernate sql-injection

2
推荐指数
1
解决办法
278
查看次数

Winforms WebBrowser告诉我们什么时候刷新

我有一个每20秒刷新一次的页面,我需要知道它何时刷新,当你因某些原因刷新时,DocumentCompleted事件不会触发.有任何想法吗?

.net vb.net windows webbrowser-control

1
推荐指数
1
解决办法
1325
查看次数

CodeIgniter将类加载到类中

我已经开始使用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

php codeigniter

2
推荐指数
1
解决办法
5125
查看次数

1
推荐指数
1
解决办法
141
查看次数

在java上绘制图形

我想在Java中绘制图形(节点和边).但是,由于我不知道如何去做,我想在开始之前先给出一些建议.

我该怎么做?

使用Graphics2D包,对吗?

节点的标签怎么样?我应该使用drawString之类的东西并手动处理所有"居中"或为此创建一个JLabel吗?我可以在Graphics2D环境中放置JLabel吗?

我搜索过但没有找到任何简单的实现.如果您知道其中一个,请在答案中提供链接.

编辑:我正在寻找的解决方案应该能够删除节点,拖动节点,编辑标签,创建节点,所有这些都与鼠标事件.

谢谢.

java drawing graph nodes

20
推荐指数
4
解决办法
5万
查看次数

严格的指针别名:是通过'volatile'指针/引用访问解决方案吗?

一个特定的问题,一个自我回答和评论之后,我想了解它是否是一个正确的解决方案,解决方法/黑客或者只是完全错误.

具体来说,我重写了代码:

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指针的限定符.

让我们假设在我的情况下对待Tint有道理的.这是通过volatile引用解决指针别名问题吗?

供参考,来自规格:

[注意:volatile是对实现的暗示,以避免涉及对象的激进优化,因为对象的值可能会被实现无法检测到的方式更改.有关详细语义,请参见1.9.一般来说,volatile的语义在C++中与在C中的相同. - 最后的注释]

编辑:

上面的代码确实至少在GCC 4.5上解决了我的问题.

c++ volatile strict-aliasing type-punning

8
推荐指数
1
解决办法
1354
查看次数

我怎么能用cout << myclass

myclass 是我写的一个C++类,当我写的时候:

myclass x;
cout << x;
Run Code Online (Sandbox Code Playgroud)

我如何输出10或者20.2像一个integer或一个float值?

c++ integer class input

71
推荐指数
4
解决办法
5万
查看次数

目标PHP和键值编码

在我的代码的某些部分,我需要这样的东西:

$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)

所以我可以动态生成数组的键.但是如何为对象做到这一点?请帮助我,因为谷歌给了我数组等结果的河...谢谢

php key-value-coding

2
推荐指数
1
解决办法
345
查看次数