SOLID - 违反开闭原则
SOLID - Violated Open-Closed principle
我有以下代码片段
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 违规行为。
如何更好地实施?
我会做的是为您的 "Exporting" 车辆介绍另一个 class。
类似这样。
public class VehicleExporter
{
public string ExportAsJson(Vehicle vehicle)
{
// Do the JSON thing
}
public string ExportAsXML(Vehicle vehicle)
{
// Do the XML thing
}
}
你的设计最重要的不是打破开闭原则,而是车辆的责任class。
当您的 class 执行 toString() 时,它本质上是在尝试做一些超出其职责范围的事情。
如果我能进一步说明,请告诉我。
我有以下代码片段
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 违规行为。
如何更好地实施?
我会做的是为您的 "Exporting" 车辆介绍另一个 class。
类似这样。
public class VehicleExporter
{
public string ExportAsJson(Vehicle vehicle)
{
// Do the JSON thing
}
public string ExportAsXML(Vehicle vehicle)
{
// Do the XML thing
}
}
你的设计最重要的不是打破开闭原则,而是车辆的责任class。
当您的 class 执行 toString() 时,它本质上是在尝试做一些超出其职责范围的事情。
如果我能进一步说明,请告诉我。