我有一个用ABAP / BSP编码的Web应用程序。我有兴趣提供精美的代码,所以也许你可以帮助我认识一些好的或坏的模式。其实我做了以下。声明基类对象并基于具有子类的某个参数动态实例化它。基类有一些数据提取方法()子类使用这些数据并可能对其进行操作。
这里有一些快速的基本图片(抱歉不要认为它符合任何标准或语言,但应该给你一个想法)
alt text http://img35.imageshack.us/img35/4351/designkdp.jpg
这样的事情好吗?是否隐藏了任何已知模式,还是应该重构并使用模式?我喜欢这里的一些建议。我已经阅读过维基百科的文章,但我没有看到完全匹配的模式。 (还订购了一些书,但你们肯定会更快:))
答案 0 :(得分:3)
答案 1 :(得分:1)
这是Gamma,Helm,Johnson和Vlissides出版的“设计模式:可重复使用的面向对象软件的元素”一书中的工厂模式。
答案 2 :(得分:1)
BaseClass和SubClasses在我看来喜欢有(伪代码)
interface IDataProvider{
GetData();
}
class SubClass1 implements IDataProvider{
GetData(){
...
}
}
您使用的实例化策略似乎像Factory一样工作。 你可以做的是在一些HTMLRenderingEngine中设置渲染或其他任何东西(我不熟悉ABAP / BSP),只是为了让演示文稿与逻辑的其余部分分离。
答案 3 :(得分:0)
继承很有趣,但应该用作最后的手段。我并不是说你不能像你那样做 - 你的解决方案是完全有效的,但只是建议一个替代方案......
如果你有“DataClass”,你可以设置一个processData对象(或不是)。 processData对象实际上是一个具有单个方法“processData”的接口。
当你调用getData时,它可能看起来像这样:
if(processDataObject == null)
return getInformation();
else
return processDataObject.processData(getInformation());
哎呀,如果你有一个“passthrough”processData对象定义为什么都不做,并使用它作为默认的“processDataObject”,那么整个getData方法变为:
return processDataObject.processData(getInformation());
这将允许动态创建类来执行您想要的任何类型的处理 - 它将简化您在此设计之上构建的内容。
这种设计风格让我花了一些时间与你达成协议,你可能不喜欢最初避免继承的想法,我只是想你想一想。我对遗传的使用现在非常罕见,当我使用遗传时,它总是在非常浅的树上。