Это довольно простой, но довольно общий вопрос, поэтому я хочу услышать, что думают люди. У меня возникла ситуация, когда мне нужно взять существующий файл 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?