2010-11-09 45 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