我设计了几个视图,这些视图应该显示玩家及其属性的列表,但是从不同的角度来看。
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
所有观点的共同点是Name
和Exp
- 所以将它们移动到BaseView是有意义的。此外,还有一个Skill
,它在2/3视图中使用,可能会在下一个视图中使用,因此它也可以移动到基本视图。
问题是:
Skill
属性渲染) - 它不是一个不必要的实体吗?Name
和Exp
保留在BaseView中并在ViewA和ViewB中重新实现Skill
属性,则不会进行代码复制。 此案例的推荐做法是什么?
UPD:为了使问题更通用,假设我有20个属性和10个视图,每个属性应该显示7个不同的属性。我担心我最终会使用BaseWithSkillExpHpManaBonusView。
答案 0 :(得分:1)
如果您有20个属性和10个视图,并且每个属性应显示~7个不同的属性,我建议您使用装饰模式。
http://www.dotnet-tricks.com/Tutorial/designpatterns/VRQT130713-Decorator-Design-Pattern---C
在这种情况下,您可能会使用IBaseView,BaseView,BaseViewDecorator,HealthDecorator:BaseViewDecorator等等。