SOLID - нарушенный принцип открытого-закрытого
У меня есть следующий фрагмент кода
class Vehicle{
public String brand;
public double price;
public int productionYear;
public String toString(String formatType) {
switch(formatType) {
case "JSON": // JSON formatting here
return jsonFormattedString;
break;
case "XML": // XML formatting here
return xmlFormattedString;
break;
default: // default formatting
return defaultFormattedString;
}
}
Я считаю, что проблема с этим подходом заключается в необходимости изменения исходного кода при изменении поведения (другой тип форматирования); и, возможно, другие твердые нарушения, которые я пропустил.
Как это может быть лучше реализовано?
0 ответов
Что я хотел бы сделать, так это ввести еще один класс для "Экспорта" вашего автомобиля.
Что-то вроде этого.
public class VehicleExporter
{
public string ExportAsJson(Vehicle vehicle)
{
// Do the JSON thing
}
public string ExportAsXML(Vehicle vehicle)
{
// Do the XML thing
}
}
Главное в вашем дизайне - не столько нарушение принципа открытого закрытого типа, сколько ответственность за класс автомобиля.
Когда ваш класс выполняет toString(), он, по сути, пытается сделать что-то вне его ответственности.
Пожалуйста, дайте мне знать, если я могу уточнить дальше.