1

我有一个用 ABAP / BSP 编码的 Web 应用程序。我有兴趣提供优秀的代码,所以也许你可以帮助我识别一些好的或坏的模式。其实我在关注。声明一个基类对象并使用子类根据某些参数动态实例化它。基类有一些获取数据的方法(),子类使用这些数据并可能对其进行操作。

这里有一些快速的基本图片(抱歉不认为它符合任何标准或语言,但应该给你一个想法)

替代文字 http://img35.imageshack.us/img35/4351/designkdp.jpg

这样的事情可以吗?是否有任何已知的模式隐藏或者我应该重构并使用模式?我喜欢在这里提一些建议。我已经阅读了维基百科的文章,但我没有看到完全适合的模式。(还订购了一些书,但你们肯定更快:))

4

4 回答 4

3

这似乎是一种工厂方法

于 2009-06-18T14:32:56.490 回答
1

这是 Gamma、Helm、Johnson 和 Vlissides 所著的《设计模式:可重用的面向对象软件的元素》一书中的工厂模式。

于 2009-06-18T14:36:23.597 回答
1

BaseClass 和 SubClasses 在我看来像是(伪代码)

interface IDataProvider{
  GetData();
}

class SubClass1 implements IDataProvider{
  GetData(){
     ...
  }
}

您使用的实例化策略似乎像工厂一样工作。您可以做的是在一些 HTMLRenderingEngine 或其他任何东西(我不熟悉 ABAP/BSP)中布置渲染,只是为了让演示文稿与其余逻辑分离。

于 2009-06-18T14:37:12.800 回答
0

继承很有趣,但应该作为最后的手段。我并不是说你不能像以前那样做——你的解决方案是完全有效的,只是为了建议一个替代方案......

如果你有“DataClass”,你可以在其中设置一个 processData 对象(或不)。processData 对象实际上是具有单个方法“processData”的接口。

当您调用 getData 时,它可能看起来像这样:

if(processDataObject == null)
    return getInformation();
else
    return processDataObject.processData(getInformation());

哎呀,如果您定义了一个“直通” processData 对象,它什么都不做并将其用作默认的“processDataObject”,那么整个 getData 方法将变为:

return processDataObject.processData(getInformation());

这将允许动态创建类来执行您想要的任何类型的处理——它将简化您在此设计之上构建的东西。

这种设计风格我花了一段时间才接受,你可能一开始不喜欢避免继承的想法,我只是要求你考虑一下。这些天我很少使用继承,当我使用它时,它总是在很浅的树上。

于 2009-06-18T15:53:01.800 回答