2016-05-29 5 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 

すべてのビューに共通の事はNameExpある - そうBaseViewに移動することに意味があります。また、Skillがあります。これは2/3のビューで使用され、おそらく一部の次のビューで使用されるため、ベースビューにも移動できます。

質問は以下のとおりです。

  • BaseViewにレンダリングするすべてのプロパティを持つようにして、特定のビューでそれらを使用する場合 - それはOOD違反ではないでしょうか?
  • 新しいBaseWithSkillViewを作成する場合(明らかにBaseViewを継承し、Skillプロパティレンダリングを実装する)、不要なエンティティではないでしょうか?
  • (修辞問題)NameExpをBaseViewに保存し、ViewAとViewBのSkillプロパティを再実装する場合は、コードをコピーしないでください。

このケースで推奨される方法は何ですか?

UPD:より一般的な質問をするには、20個のプロパティと10個のビューがあり、それぞれが7つの異なるプロパティを表示する必要があるとします。私はBaseWithSkillExpHpManaBonusViewで終わるのではないかと思います。

+0

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

+0

@ZoharPeled答えがありがとう、私は質問を更新しました。 –

答えて

1

20個のプロパティと10個のビューがあり、それぞれに〜7個の異なるプロパティが表示される場合は、デコレータパターンを使用することをおすすめします。その上BaseViewDecoratorと:この場合

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

あなたはIBaseView、BaseView、BaseViewDecorator、HealthDecoratorのようななめらかを持っているでしょう。

+0

そうです、オプションのように聞こえる –

関連する問題