C#类使用静态方法创建基础

时间:2014-11-17 20:43:34

标签: c# methods static factory

我正在开发一个独立的C#SolidWorks API应用程序,它可以进行参数化建模。访问SW对象的功能需要许多类型/接口。 SketchLine类型的对象(只是草图中的一行)需要转换为SketchSegment类型以访问GetLength()方法,并且需要将其转换为实体类型以向其添加属性,同时获取它的持久ID我需要使用ModelDocExtension类型的对象的方法等...为了简化建模,我在新类中从不同的类型/接口公开与SW对象相关的方法,而引用实际SW对象的字段在一些祖先类中放置

class GreatAncestor
{
    public GreatAncestor(SketchPoint swPoint)
}

class Ancestor: GreatAncestor
{
    public Ancestor(SketchPoint swPoint):
        base (skPoint)
}

class MySketchPoint : Ancestor
{
    public MySketchLine (SketchPoint swPoint):
        base (swPoint)
}

我有一个Factory类,其方法可以返回类的对象。这是一个非常大的类,有很多方法。 Factory类的方法看起来非常相似:它们首先创建SolidWorks对象,然后将其传递给我的类:

class Factory
{
    public MySketchPoint CreateSketchPoint(double X, double Y)
    {
        SketchPoint swPoint SketchManager.CreatePoint(X, Y, 0);
        // CreatePoint is a SW API method

        MySketchPoint MyPoint = new MySketchPoint(swPoint);
        return MyPoint;
    }
}

我认为在我的类中包含静态方法并且根本不使用Factory类会更加简洁:

class MySketchPoint : Ancestor
{
    private static SketchPoint CreateSketchPoint(double X, double Y)
    // this method creates a point in the sketch in SolidWorks and returns it's reference

    public MySketchLine (double X, double Y):
        base (CreateSketchPoint(double X, double Y))
}

编写建模代码时:

MySketchPoint Point = new MySketchPoint(10,20);

VS

MySketchPoint Point = Factory.CreateMySketchPoint(10,20);

这个设计并没有为我节省任何编码线,但它允许我将所有相关项目放在一个地方以及一个大类更少。它确实在我的课程中给了我一个我不喜欢的静态方法。

我想知道这种设计的缺点和适用性。

1 个答案:

答案 0 :(得分:0)

假设您正在从工厂方法中安全地创建实例,我不会在不了解应用程序的整体设计的情况下看到任何直接的缺点。它看起来像工厂方法模式的一个相当典型的实现,这是非常常见的,并提供封装和组织您的创建逻辑的好处。

作为一般原则,我唯一要注意的是仅仅因为你喜欢代码看起来与另一种方式相同的方式而以某种方式实现某种方式。有理由以这种方式实现它,这样你就可以解释为什么它会在那里,如果有人问起来。

如果您不喜欢将静态成员与实例成员混合在一起,则可以始终将静态方法放在单独的工厂类中以保持它们分离。

希望有助于回答您的问题。