用于加载和保存对象的构造函数或静态方法?

时间:2009-01-22 02:40:22

标签: c# .net design-patterns architecture

我正在尝试决定使用静态方法来加载/保存对象,还是使用构造函数/实例方法。

因此,对于对象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 }

那么,你更喜欢哪一个?

3 个答案:

答案 0 :(得分:9)

都不是。支持从域模型中提取持久性逻辑,并进入单独的类层。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

对于保存,我认为使Save成为静态方法没有任何好处。

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

我同意moffdub的回答,if-and-only-如果功能大到足以使持久性逻辑值得拆分/分离到其他类中。但是,如果您这样做,那么Project中包含的数据的详细信息将不再是私有的(相反,这些详细信息必须与加载和保存Project实例的类共享)。