【发布时间】:2026-02-08 20:15:02
【问题描述】:
我正在设计几个视图,它们应该显示玩家及其属性的列表,但从不同的角度。
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视图,可能会在一些下一个视图中使用,所以它也可以移动到基础视图中。
问题是:
- 如果在 BaseView 中呈现所有属性并在特定视图中使用它们 - 会不会违反 OOD?
- 如果制作新的 BaseWithSkillView(显然会继承 BaseView 并实现
Skill属性渲染) - 这不是不必要的实体吗? - (反问)如果将
Name和Exp保留在 BaseView 中,并在 ViewA 和 ViewB 中重新实现Skill属性 - 这不是代码复制。
此案例的推荐做法是什么?
UPD:为了使问题更通用,假设我有 20 个属性和 10 个视图,每个视图都应该显示 7 个不同的属性。恐怕我最终会使用 BaseWithSkillExpHpManaBonusView。
【问题讨论】:
-
BaseView, => BaseWithSkill, => ViewA, ViewB; BaseView => ViewC
-
@ZoharPeled 感谢您的回答,我已经更新了问题。
标签: c# oop architecture