我正在尝试决定使用静态方法来加载/保存对象,还是使用构造函数/实例方法。
因此,对于对象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 }
那么,你更喜欢哪一个?
答案 0 :(得分:9)
都不是。支持从域模型中提取持久性逻辑,并进入单独的类层。
(来自ChrisW回答中留下的评论)关于域对象泄露到另一个类的详细信息:如果您的语言允许,您可以使用package-privacy / internal访问来限制这些详细信息的可见性。或者,您可以使用DTO方法。
答案 1 :(得分:1)
如果没有要维护的状态,只有行为,那么使用静态方法。但是,如果Project对象需要具有状态,则应使用构造函数/实例方法。
答案 2 :(得分:1)
对于保存,我认为使Save
成为静态方法没有任何好处。
对于加载,如果Load
是抽象基类,则定义静态Project
方法会更好;但除此之外,定义和调用构造函数更具惯用性。
我同意moffdub的回答,if-and-only-如果功能大到足以使持久性逻辑值得拆分/分离到其他类中。但是,如果您这样做,那么Project
中包含的数据的详细信息将不再是私有的(相反,这些详细信息必须与加载和保存Project实例的类共享)。