2012-04-26 99 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

相關問題