C# 绘图应用程序使用哪种设计模式

C# 绘图应用程序使用哪种设计模式,c#,.net,oop,design-patterns,C#,.net,Oop,Design Patterns,我正在为autocad编写外接程序,但我遇到了一个设计问题。我认为这可以通过设计模式来解决 我试图画一张桌子,桌子有两部分,一个框架和一个顶面。因此,我有以下三个课程: 绘制:此类验证用户输入并请求插入点,创建框架和曲面,并将新创建的实例插入autocad DB 帧:根据长度和深度计算帧 曲面:根据长度和深度计算曲面 我的问题是,如果用户给定的长度值大于max,则我必须生成2个或更多曲面。曲面类还必须知道哪个曲面是第一个曲面和最后一个曲面。而Draw类还应该知道第一个曲面的端点放置第二个曲面

我正在为autocad编写外接程序,但我遇到了一个设计问题。我认为这可以通过设计模式来解决

我试图画一张桌子,桌子有两部分,一个框架和一个顶面。因此,我有以下三个课程:

  • 绘制:此类验证用户输入并请求插入点,创建框架和曲面,并将新创建的实例插入autocad DB
  • :根据长度和深度计算帧
  • 曲面:根据长度和深度计算曲面

我的问题是,如果用户给定的长度值大于max,则我必须生成2个或更多曲面。曲面类还必须知道哪个曲面是第一个曲面和最后一个曲面。而Draw类还应该知道第一个曲面的端点放置第二个曲面的位置

我现在所做的是将一个名为calcNumberOfSurface(int len)的方法放入Draw类中,在这个方法中,我迭代了曲面的数量,以在每次类曲面的新instate时创建曲面。这个解决方案也有两个问题,曲面类不知道它是第一个还是最后一个。无法定义第一个曲面的结束位置。我必须在Draw类中实现这一点


有没有解决这个问题的最佳实践或设计模式?

我同意普雷斯顿的观点。在您开始设计模式之前,我认为您必须首先考虑所有必需的类以及每个类的成员。例如:

  • “结束位置”不是曲面类的成员吗
  • 另一类可能表示
    列表
    (曲面列表)。此类将包含第一个曲面和最后一个曲面

根据我的经验,如果你进入一个项目计划使用一种设计模式,你会使它变得过于复杂,最终花更多的时间在它上面。通常,一旦我看到一个可以有效使用的地方,我就会重构成一个设计模式。很多时候,设计模式会加入很多你不需要的东西,这就是为什么我采用这种方法。所以我等到一个灯泡点击“嘿,这个图案会非常适合”才开始使用它们,否则事情会变得比需要的更复杂。无论如何,这只是我的偏好,我相信其他人可能会不同意。“我的问题是,如果用户给出的长度值大于max”-max是什么?我不明白为什么你必须创建多个曲面。@普雷斯顿也许你是对的,但我没有足够的DP经验来确定我是否需要一个和哪一个。我的想法是在这里问一下,然后也许有人可以识别DP。@raymond Max是一个曲面在单个工件中允许的最大长度。因此,如果用户提供的长度大于MAX;然后程序应将总长度分成两个或多个曲面,每个曲面不大于最大值。我同意其他曲面。您的解决方案不一定需要设计模式,只需要合理的OO设计原则。@user1890239这是一个很好的建议。Draw类不需要知道有关曲面的详细信息。事实上,可以将曲面设计为能够绘制自身(从IDrawable类派生/从AbstractDrawObject继承并实现绘制方法)。框架也是如此。