2012-04-26 64 views
0

这是一个更好的方法,就代码重用而言,代码修改? 当我需要在将来为savePayment方法添加新参数时,我可能需要在许多控制器文件中更改paymentDao.savePayment()方法。 我也想过创建另一个类只是为了传递参数,就像paymentDao.savePayment(parameterClass)这是一个更好的解决方案吗?还是有比这更好的解决方案?更好的编写代码的方法

paymentDao.savePayment(fromUserId, toUserId, amount, paymentMethod, note, paymentGateway); 

class PaymentDaoImpl implements PaymentDao{ 
    public void savePayment(long fromUserId, long toUserId, double amount    String paymentMethod, String note, String paymentGateway){ 
      PaymentStdReln paymentStdReln = new PaymentStdReln(); 
      paymentStdReln.setFromUser(fromUserId); 
      paymentStdReln.setToUserId(toUserId); 
      paymentStdRelnDao.save(paymentStdReln); 

      PaymentGateway pg = new PaymentGateway(); 
      pg.setGateway(paymentGateway); 
      paymentGateWayDao.save(pg); 
      ..... 
      //In this way save into many table 
    } 

}

+2

http://codereview.stackexchange.com/ – Quentin 2012-04-26 14:52:48

回答

1

我只能给一些一般性建议:

  1. 代码重用和改变

您应该设计这样,你会不会需要改变savePayment为每个控制器。相反,在一种方法中拥有核心功能,并让其他特定类型的方法通过继承或组合来重用它。

private void corePayment(p1, p2, ...); 


public specialPaymentOne(p1, p2, ..., a1, a2, ..) { 
    corePayment(p1, p2, ...) 
    // do extra stuff 

} 

public specialPaymentTwo(p1, p2, ..., b1, b2, ..) { 
    corePayment(p1, p2, ...) 
    // do extra stuff 

} 

等等。

  1. 具有状态和构造

一般来说,一类应该有一定的状态,实例变量。如果没有,那么班级的存在就会成为问题。在你的情况下,也许你的方法可能实际上属于这个类的一些参数,并且可以传递给类的构造函数,这会使你的方法简化很多。象,而不是

Class A { 
    method1(v1, v2, v3, x1, x2); 
    method2(v1, v2, v3, y1, y2); 
    method3(v1, v2, v3, z1, z2); 

} 

你可能有

Class A { 

    var1; 
    var2; 
    var3; 
    //more 

    // Constructor 
    public A(v1, v2, v3, ...) { 
     var1 = v1; 
     va12 = v2; 
     var3 = v3; 
     // 
    } 
    method1(x1, x2); 
    method2(y1, y2); 
    method3(z1, z2); 

} 

3.

如果一个对象不能没有某些一块信息工作,那么这些信息必须传递的对象,在施工时间。例如,而不是

PaymentGateway pg = new PaymentGateway(); 
pg.setGateway(paymentGateway); 

最好是有

PaymentGateway pg = new PaymentGateway(paymentGateway); 

这有很大的优势,除其他外,它确保一个PaymentGateway是无处使用,当只有部分初始化。

+0

让我们说我们有学生pojo学生表。我们还需要在学生桌上添加一个属性,因此也在学生桌上添加一个属性。所以在这种情况下, 学生=新学生(); student.setName(name); student.setAge(12); .. student.setNewAttribute(newAttribute); studentDao.save(student); 在这种情况下,无论我们在哪里保存学生对象,我们的控制器类中的每个位置都需要进行更改。对? – user510783 2012-04-26 18:32:19

+0

问题依然会和你的方法一样。如果有一个要添加到pojo的新属性,那么在任何地方都已经使用了这个pojo clasess,在使用这个对象之前,需要添加额外的代码student.setNewAttribute(newAttribute)。但是,改变构造函数不是更好吗?如果不是,那么如何保证在某个地方,有些人可能会忘记在实例化后添加student.setNewAttribute(newAttribute)代码,并在处于不一致状态时使用该对象。 – 2012-04-27 15:01:14

相关问题