簡體   English   中英

避免重復代碼Java

[英]avoid repetitive code Java

我正在ETL Java項目上工作,它提取了3件事-從表中讀取數據將數據轉換為JSON加載數據效果很好。 問題是我正在為每個表這樣做。 我現在的方式是

   class ETLHelper
   {
     private Person read(ResultSet results){
       Person p = new Person();
       p.setPersonId(results.getString("PERSON_ID"));
       p.setPersonName(results.getString("PERSON_NAME"));
       return p;
     }
     private String transform(Person p){
       TransformPerson t = new TransformPerson();
       t.setTransformPersonId(p.getPersonId);
       t.setTransformPersonName(p.getPersonName);
       PersonEData eData = new PersonEData();
       eData.setDate1(p.date1);
       eData.setDate2(p.date2);
       t.seteData(eData);
       PersonDetails pd = new PersonDetails();
       pd.settransformdata(t);
       return writeValueAsString(pd);
     }
     public void etl(){
       Connection c = null;
       PreparedStatement p = null;
       ResultSet r = null;

       c = getConnection();
       p = c.prepareStatement(getSql());
       r = p.executeQuery();

       while(r.next()){
        messages.add(transform(read(r)));
       /*code for loading data*/
       }
     }

   }

人Java

 @JsonTypeName(value = "PERSON")
 @JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
  public class Person{
   @JsonProperty(value = "PERSON_ID")
   private String personId;
   //getter and setter for personId
   @JsonProperty(value = "PERSON_NAME")
   private String personName;
   //getter and setter for personName
}

TransformPerson.java:

@JsonRootName(value = "Person")
class TransformPerson{
 private String transformPersonName;
 private String transformPersonId;  
 /*getter and setter for transformPersonName and tranformPersonId*/
 @override
 String toString(){
  return "Person [name =" + transformPersonName + ", id = " + transformPeronId "]";
  }
 }

PersonEdata:

private String date1;
private String date2;
/*getter and setter*/
@override
public String toString(){
 return "PersonEdata [date1=" + date1 +", date2=" + date2 + "]";
}

因此,為每個表編寫了Person類,轉換所需的類和etl類。 還有一些其他類,例如PersonEdata,當調用toString()時返回JSON。 無論如何,我可以更改此設計以避免為每個表編寫類似的代碼嗎? 有一些限制。 每個表都是不同的,並且它們需要轉換類,因為還有其他程序使用生成的JSON,因此我們需要生成那些程序需要理解的JSON。

在當前解決方案中,您已經創建了:

  1. 人員類-保存從數據庫檢索的數據

  2. PersonTransform類-將數據從Person復制到其他表示形式,並通過覆蓋toString()擴展了創建JSON的功能

為簡單起見,您可以執行以下操作:

  1. 每個實體(表)都有一個像Person這樣的類-這是JSON可序列化的。

  2. 不要重寫toString方法來表示JSON表示-請改用JSON序列化器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM