2015-06-25 36 views
0

在这里,我们有:DAO持久性:只有一种方法来存储复杂的数据对象?

public final class Product { 

Integer productId; 
String description; 
... 

public Product(final Integer productId, final String descripcion, ...) { 
    this.product_id = productId; 
    this.description = description; 
    ... 
} 

public Integer getProductId() { ... } 
public String getDescription() {...} 

... 

} 

一则:

public final ProductDetails { 

Integer productId; 
String serialNumber; 
... 
public ProductDatails(final Integer productId, final serialNumber, ...){ ... } 
public Intger getProductId() { ... } 
public String getSerialNumber { ... } 
... 

} 

因此,为了建立其持续两个类包含的数据DAO,问题是,如果它是一个很好的做法做如下:

public Interface IProductDAO { 

     public void saveProduct(final Product product); 
     public void saveProductDetails(final ProductDetails productDetails); 

    } 

或:

public Interface IProductDAO { 
public void saveProduct(final Product product, final ProductDetails productDetails); 

我一直在服用考虑到两个类重构为一个如下:

public final class Product { 

Integer productId; 
String description; 
ProductDetails productDetails; 
... 

public Product(final productId productId, final String description, final ProductDetails productDetails,...) { 

    if(productId!=productDetails.getProductId()) 
     throw new IllegalArgumentException("ProductID is not the same"); 

    ... 

} 

}

所以:

public Interface IProductDAO {    
     public void saveProduct(final Product product);        
} 

我想知道哪一个是最根据最佳软件开发实践的'自然'方法。如果还有其他方法,他们也会受到欢迎。

+0

我喜欢你的最后一个。 ProductDetails成为产品的一部分似乎是合乎逻辑的。 – jrahhali

回答

0

Bertrand Meyer - Object Oriented Software Construction (2Ed),该类产品应包含对产品详细的参考,因为存在这些类之间的紧密关系。

另一方面,从产品类扩展到产生新的ProductDetails类是一种很好的做法。在这两种情况下,一个DAO应该如下:

public void saveProduct(final Product product); 
0

最佳方法是你有两个java类。一个是产品,第二个是ProductDetails,您可以在其中获得产品的更多详细信息。当用户点击产品时,您可以获取此类以显示此特定项目的更多详细信息。

因此,需要在搜索页面中显示的最基本的细节可以进入产品类。

class Product { 

Integer productId; 
String description; 
@OneToOne 
@Basic(Fetch = FetchType.LAZY) 
ProductDetails details; 

public Product(final Integer productId, final String descripcion, ...) { 
    this.product_id = productId; 
    this.description = description; 
    ... 
} 


public Integer getProductId() { ... } 
public String getDescription() {...} 

... 

} 
class ProductDetails{ 
Integer productId;//any Id 
String description; 
//Storing a HD picture and other getters and setters 
} 
//details of the class 
} 
+0

我不考虑使用休眠或其他ORM。事实上,问题的关键是如何通过应对策略或设计模式来实现这种情况。 –

相关问题