我需要一个带有文本字段a,b,c的面板用于项目AA。 我需要另一个面板,其中包含项目BB的文本字段a,b,d,e,f。 在将来,我肯定需要另一个面板,其中包含项目CC的文本字段a,b,d,y,z。 将来我可能还需要另一个面板......等等。
a和b文本字段对于所有项目都是通用的,d对于BB和CC是常见的。 公共字段的布局可能不同。面板包括createComponents,guiLayout,refresh,save,getGUIErrors ......等方法。
现在,我该如何设计我的面板?继承怎么样?是否定义了一个包含字段a,b的公共面板,并为项目正确扩展它?是否可以使用合成,装饰模式?
当然,问题可以扩展到模型和控制器。
谢谢。答案 0 :(得分:1)
现在,我该如何设计我的面板?继承怎么样?是否定义了一个包含字段a,b的公共面板,并为项目正确扩展它?是否可以使用合成,装饰模式?
虽然代码重用通常很好,但在我看来,你在这里过于复杂。如果只是在面板上重复使用两个文本字段,为什么还要为所有工作而烦恼呢。我们正在讨论两行代码。
如果所有面板看起来非常相似,请使用合适的布局构建器并重用该面板(例如,参见JGoodies的FormLayout可用的构建器)。
接下来,典型的UI层非常薄。如果需要/可能,重新使用您的业务方面(UI背后的模型),但不要打扰用户界面。根据我的经验,这会导致更清晰的代码。 我看到过多的UI /面板,其中构造函数需要很多布尔标志来包含/排除某些字段,一堆受保护的方法来提供对所有组件的访问(例如,在某些条件下禁用某个字段),...简而言之,很多代码因为最终没有两个UI是相同的,你总是需要自定义。