Извините, если это действительно базовый вопрос, но я боролся с тем, как мне следует на это напасть. Я пытаюсь обернуть некоторые команды для объекта OLE, базовая спецификация выглядит следующим образом:
Set Window window_id
//Units is part of the position setter.
[ Position ( x, y ) [ Units paper_units ] ]
[ Width win_width [ Units paper_units ] ]
[ Height win_height [ Units paper_units ] ]
..... this goes on for about 20+ commands, all optional.
Если что-либо между [] необязательно.
Итак, мне нужно создать класс, давайте назовем его « CommandBuilder », который может иметь методы set для всех этих опциональных сеттеров, и это нормально, я могу справиться, главная проблема, с которой я сталкиваюсь, это Метод ToCommandString, которому нужно вывести строку, которая будет выглядеть примерно так:
Set Window 1 Position (x,y) Units "m" Height 100 Units "m" + what ever else the user added
Простое выполнение нескольких if на основе переменных, которые устанавливаются, и присоединение строки прекрасно работает, когда нет ничего сложного в том, что устанавливаемые переменные или есть только несколько переменных, но когда есть куча переменных и / или вложенных значений, которые также необязательны, это может сделать метод ToString очень длинным и сложным + сложным в обслуживании, если что-то изменится.
Мне было интересно, смогу ли я решить эту проблему, используя полиморфизм, выполнив что-то подобное.
interface ICommand
{
string ToCommandString();
}
class PositionCommand : ICommand
{
double X;
double Y;
string Units;
public PositionCommand(double x, double y)
{
this.X = x;
this.Y = y;
}
public PositionCommand(double x,double y, string units)
{
this.X = x;
this.Y = y;
this.Units = units;
}
public string ToCommandString()
{
//Add more stuff here to handle empty units.
return String.Format(" Postion ({0},{1})", X.ToString(), Y.ToString());
}
}
....more command classes.
Тогда все мои методы set в " CommandBuilder " могут просто создать правильный тип команды, добавить его в список, тогда основная ToString в методе " CommandBuilder " может пройти через все те, которые были установлены и вызывают ToCommandString, и не нужно беспокоиться о выполнении каких-либо проверок или нулевых проверок.
Это будет правильный путь?
P.S. Если вам нужна дополнительная информация, я был бы рад добавить, просто не хотел делать это долго сначала.