2009-01-22 58 views
2

我想决定是使用静态方法来加载/保存对象,还是使用构造函数/实例方法。用于加载和保存对象的构造函数或静态方法?

所以,说的对象Project,实例的版本将是

public Project(path) { // Load project here } 
public void Save(path) { // Save project here } 

和静态版本将

public static Project Load(path) { // Load project and return result } 
public static void Save(path, proj) { // Save project } 

所以,您选哪一种?

回答

9

也没有。支持从您的领域模型中提取持久性逻辑并将其提供到单独的类层。

(来自ChrisW回答中留下的评论)关于域对象泄漏到另一个类中的详细信息:如果语言允许,可以通过使用包隐私/内部访问来限制这些详细信息的可见性。或者,您可以使用DTO方法。

1

如果没有要维护的状态,则只有行为,则使用静态方法。但是,如果Project对象需要具有状态,则应该使用构造函数/实例方法。

1

为了节省,我认为Save是一个静态方法没有任何优势。

对于加载,如果Project是抽象基类,则定义静态Load方法会更好;但除此之外,定义和调用构造函数更具惯用性。

可替换地,我同意moffdub的答案,如果 - 且 - 只要功能足够大,使持久性逻辑值得分解/分离到其他类中。但是,如果您这样做,那么Project中包含的数据的详细信息不再是私有的(而是必须与加载和保存Project实例的类共享这些详细信息)。

+0

静态保存的唯一真正好处是它可以移动到另一个类。我只是为了完整而将它包括在内。但我同意,如果在对象上定义了保存,则可能值得使用实例版本。 – 2009-01-22 02:55:36