2010-11-09 37 views
0

我在我的Java應用程序中使用TopLink持久性庫與MySQL數據庫。Java持久性,數據庫實體和其他模型之間的通信

我開發了幾個桌面應用程序使用的類庫,它包含一些特定於我的項目的類。類彼此關聯,通常採用一對多關係。

我想將DB實體類和項目特定的類分開。

我應該如何開發這些類之間的通信(繼承,使用或其他?)。在將數據加載(或放入)數據庫時,應如何開發項目特定類之間的關係?

回答

2

我猜是因爲它是一個桌面應用程序,它是一個基於UI的應用程序。所以MVC架構在這裏最合適。另外我想你將不得不使用Java bean來對模型進行異步訪問。

首先定義一個需要所有定義的模型。

讓說

 class person 
{ 
     public PropertyChangeSupport propertyChange = new PropertyChangeSupport(this); 

     private String firstName; 
     private String middleName; 
     private String lastName; 
     private int gender; 
     private Integer age; 
     . 
     . 

     set Fname(String firstName) 
     { 
         propertyChangeSupport.firePropertyChange("firstName",this.firstName,this.firstName   = firstName); 
     } 
     . 
     . 
     . 
     public void setPropertyChange(PropertyChangeSupport propertyChange) { 
       this.propertyChange = propertyChange; 
     } 


     public PropertyChangeSupport getPropertyChange() { 
       return propertyChange; 
     } 

     public void removePropertyChangeListener(PropertyChangeListener listener) { 
     propertyChange.removePropertyChangeListener(listener); 
     } 

} 

現在,我們需要一個模型供應商,這將是一個單例模式。

class PersonMOdelProvider 
{ 

private static List<Person> lst ; 
private static PersonMOdelProvider content; 
private PersonMOdelProvider() 
{ 
    // Get data from data base layer. 
    lst = new ArrayList<Person>(); 
    //load the list from database 
} 

public static PersonModelProvider getInstance() 
{ 
if (content!=null) return content; 
content = new PersonMOdelProvider(); 
return content; 
} 

. 
. 
. 
set ... get methods for binding db with model. 

} 

現在在UI部分,您首先需要獲取模型提供者的實例,並通過模型提供者進行所有進一步的交互。

+0

感謝您的回答。但是,如果我已經理解了你,我將爲每個實體分配3個類 - 由NetBeans生成的DBEntity類(實現Serializable),存儲在類庫中的模型類(包含業務邏輯和關聯) )和ModelProvider類。這也意味着我應該爲每個桌面應用程序中的每個模型創建2個類(ModelProvider和DBEntity類)? – 2010-11-11 18:55:27

+0

現在,這將是你的技能,設計類。您正在設計基礎類,那麼您將共享大部分代碼。 – Chaitannya 2010-11-11 20:13:06

+0

順便說一句,你需要爲每個模型分別建立一個模型類,但模型提供者對於幾組模型可能是通用的。再次取決於你的應用和設計技巧 – Chaitannya 2010-11-11 20:17:37