【发布时间】:2009-09-18 11:47:40
【问题描述】:
这是非常基本的,但有点笼统的问题,所以我想听听人们的想法。我有一种情况,我需要获取一个现有的 MSI 文件并通过一些标准修改对其进行更新,然后生成一个新的 MSI 文件(旧文件的复制与更改)。
我开始使用一些公共方法和原始 MSI 的基本输入路径来编写这篇文章。问题是,要使其正常工作,调用者必须遵循严格的调用路径:
var custom = CustomPackage(sourcemsipath);
custom.Duplicate(targetmsipath);
custom.Upgrade();
custom.Save();
custom.WriteSmsXmlFile(targetxmlpath);
将所有转换逻辑作为构造函数的一部分而不是将它们作为公共方法提供会更好吗? (为了避免让调用者知道“正确的顺序”是什么):
var custom = CustomPackage(sourcemsipath, targetmsipath); // saves converted msi
custom.WriteSmsXmlFile(targetxmlpath); // saves optional xml for sms
然后,构造函数将直接复制 MSI 文件,对其进行升级并将其保存到目标位置。 “WriteSmsXmlFile 仍然是一个公共方法,因为它并不总是必需的。
我个人不喜欢让构造函数真正“做事”——我更喜欢能够调用公共方法,但假设调用者应该知道正确的调用顺序似乎是错误的?
另一种方法是先复制文件,然后将复制的文件传递给构造函数 - 但最好让类自己执行此操作。
也许我把它全部倒退了,需要两个类:SourcePackage、TargetPackage,并将 SourcePackage 传递给 TargetPackage 的构造函数?
【问题讨论】:
标签: class constructor