SOLID - нарушенный принцип открытого-закрытого - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть следующий фрагмент кода

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;
    }
}

Я считаю, что проблема с этим подходом заключается в необходимости изменения исходного кода, если меняется поведение (другой тип форматирования);и, может быть, другие нарушения SOLID, которые я пропустил.

Как это можно лучше реализовать?

1 Ответ

0 голосов
/ 31 января 2019

То, что я хотел бы сделать, - это ввести еще один класс для «Экспорта» вашего автомобиля.

Примерно так.

public class VehicleExporter
{
    public string ExportAsJson(Vehicle vehicle)
    {
        // Do the JSON thing
    }

    public string ExportAsXML(Vehicle vehicle)
    {
        // Do the XML thing
    }
}

Самое важное в вашем дизайне - не столько ломать открытостьзакрытый принцип, но ответственность за класс транспортного средства.

Когда ваш класс выполняет toString (), он, по сути, пытается сделать что-то вне его ответственности.

Пожалуйста, дайте мне знать, если я смогу уточнить.

...