具有相似实体但具有不同属性的继承设计

时间:2016-05-29 07:55:37

标签: c# oop architecture

我设计了几个视图,这些视图应该显示玩家及其属性的列表,但是从不同的角度来看。

ViewA shows player's: Name, Exp, Skill, Condition
ViewB shows player's: Name, Exp, Skill, Bonus
ViewC shows player's: Name, Exp, Price, Bid amount

所有观点的共同点是NameExp - 所以将它们移动到BaseView是有意义的。此外,还有一个Skill,它在2/3视图中使用,可能会在下一个视图中使用,因此它也可以移动到基本视图。

问题是:

  • 如果要在BaseView中渲染所有属性并在特定视图中使用它们 - 它是否会违反OOD?
  • 如果要制作新的BaseWithSkillView(显然会继承BaseView并实现Skill属性渲染) - 它不是一个不必要的实体吗?
  • (修辞问题)如果要将NameExp保留在BaseView中并在ViewA和ViewB中重新实现Skill属性,则不会进行代码复制。

此案例的推荐做法是什么?

UPD:为了使问题更通用,假设我有20个属性和10个视图,每个属性应该显示7个不同的属性。我担心我最终会使用BaseWithSkillExpHpManaBonusView。

1 个答案:

答案 0 :(得分:1)

如果您有20个属性和10个视图,并且每个属性应显示~7个不同的属性,我建议您使用装饰模式。

http://www.dotnet-tricks.com/Tutorial/designpatterns/VRQT130713-Decorator-Design-Pattern---C

在这种情况下,您可能会使用IBaseView,BaseView,BaseViewDecorator,HealthDecorator:BaseViewDecorator等等。