2016-05-29 3 views
0

Я разрабатываю несколько представлений, в которых должен отображаться список игроков и их свойства, но с разных точек зрения.Дизайн наследования для похожих объектов, но с разными свойствами

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 и использовать их, в частности, взглядов - не будет ли нарушать ООД?
  • Если сделать новый BaseWithSkillView (который, очевидно, наследует BaseView и реализует рендеринг свойств Skill) - не было бы это ненужным объектом?
  • (риторический вопрос) Если удержать Name и Exp в BaseView и повторно реализовать объект Skill в ViewA и ViewB - это не будет копирование кода.

Каковы рекомендуемые методы для этого случая?

UPD: Чтобы сделать вопрос более общим, предположим, что у меня есть 20 объектов и 10 видов, каждый из них должен показать, скажем, 7 разных свойств. Я боюсь, что в итоге у меня получится BaseWithSkillExpHpManaBonusView.

+0

BaseView, => BaseWithSkill, => ViewA, ViewB; BaseView => ViewC –

+0

@ ZoharPeled спасибо за ответ, я обновил вопрос. –

ответ

1

Если у вас есть 20 объектов и 10 видов, и каждый из них должен показать ~ 7 разных свойств, я бы рекомендовал вам использовать узор декоратора.

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

В этом случае вы бы л, как IBaseView, BaseView, BaseViewDecorator, HealthDecorator: BaseViewDecorator и так далее.

+0

Да, это звучит как опция –

Смежные вопросы