Спасибо за код.
Вот несколько вещей, которые вы можете попробовать:
1) Рефакторинг дубликата кода. Этот вид кода дублировался примерно семь раз:
Visio.Cell pinX = GetLayoutCell(Visio.VisCellIndices.visXFormPinX);
if (pinX != null)
{
pinX.set_Result("cm", value);
}
Примечание: PinY также вычисляет pinX, но не использует его значение.
Подобное дублирование существует в: Pos {X, Y}{Start, End}
Что делает этот класс более сложным, так это то, что он является оберткой вокруг уже сложного класса.
Не очень хорошо знаю область (хотя я экспертс концепцией Shape, Circle, Square) я бы соблазнил разбить класс на несколько классов, каждый из которых имеет один и тот же базовый объект Shape.
Вот эскиз:
class EnvironShape {
private ShapeProperties _properties; // contains property management code
private ShapeCollection _children; // contains code for acting on children
private Decorators _decorators; // code for accessing decorators
private Layers _layers; // layer management code
private Position _position; // code for working with the shape's position
// Other code omitted
}
Я бы не стал сразу и напрямую выставлять эти объекты (например, общедоступный ShapeCollection GetChildren ()), но я бы начал с делегирования EnvironShape этим объектам.