2014-01-17

http://anond.hatelabo.jp/20140116221703

一理あるご意見いただきました。ありがとうございます

英語として読みにくいなら、メソッド名のほうを変えるよ。

モンスター.attackedBy(勇者.attackPower)

誤解を招いてしまったようですいません。先の理由1では、"能動態のほうが受動態より解りやすい"、ということを主張したかったのです。

あとづけで申し訳ないのですが、その順序で書くのにはもう一つ、MVC的な理由があります

理由3: 入力Controllerのコントロール対象が明確になる

RPG戦闘シーンの入力Controllerは、ユーザーメニュー選択等によって、勇者の攻撃方法攻撃対象モンスターを決定し、攻撃を実行する。

まり、この入力Controllerがコントロールする対象は、勇者と彼の攻撃対象だ。

勇者.attack(モンスター)

と書くと、勇者に命令していることが明示されるので、その設計意図がはっきりする。

攻撃方法型は、モンスター側への攻撃にも、勇者型への攻撃にも使える

なるほど、その設計は思いつきませんでした。〈モンスターへの攻撃と勇者への攻撃を対称に捉える〉という視点目からウロコです。

増田さまへ二つ質問がございます

ひとつめの質問は、攻撃方法型は、具体的にはどんなメソッドフィールドが並ぶのか、です。

考えてみたのですが、どうしても"通常攻撃","ディレイ攻撃","attackPowerの値","すばやさ", などが並ぶ、ディクショナリ(連想配列)的なものが思い浮かんでしまます。そうすると、結局モンスターのattackedByメソッドにif分岐を並べることになってしまうので、増田さまお考えの設計とは違うのでしょう。

ふたつめの質問は、増田さまが推す設計

モンスター.attackedBy(攻撃方法型: ジャンプ攻撃)

の方が良い利点はなんでしょうか。私は"時間的な処理の流れがわかりやすい"設計になりやすいことを主張しました(理由2参照)・

増田さまが考えるほかの利点があればぜひ教えてください。

記事への反応 -
  • 例えばスーファミのFFみたいな、古典的なRPGの戦闘シーンを作っていて、「勇者がモンスターを攻撃する」。 勇者.attack(モンスター); という設計だったとする。 これに「モンスターが毒...

    • MVC以前にオブジェクト指向がしっくりきてないでしょ。 「勇者がモンスターを攻撃する」。 勇者.attack(モンスター); という設計だったとする。 これが既にオブジェクト指向的じゃな...

      • ご意見くださって、ありがとうございます。 例にあげたRPGのモデル設計はhttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1178047006を参考にしました。 ですが自分で書くとしても、十中八九そ...

        • 一理あるご意見をいただきました。ありがとうございます。 英語として読みにくいなら、メソッド名のほうを変えるよ。 モンスター.attackedBy(勇者.attackPower) 誤解を招いてしまったよ...

          • わかりやすさについてとやかく言わないけどさ、攻撃するってことは、モンスターのHPだとかが減るんだよね? 勇者.attack(モンスター) って書いたとしてもさ、勇者.attackメソッドの中で、...

            • 守備力だとか、耐性だとかは、モンスターの属性なので、影響はモンスター側で面倒見てもらいたいから、 攻撃でHPを減らすのは、モンスターのメソッド経由になると思う。 結局、 c...

        • 英語として読みにくいなら、メソッド名のほうを変えるよ。 モンスター.attackedBy(勇者.attackPower) 攻撃方法が増えるなら、攻撃方法を抽象化するでしょ。 攻撃方法型を作って モンスター....

    • モデルで発生するイベントが多く、複雑になるほど、ビューとの関連は密になる。 ここの所は、今回の例ではいまいち見えづらい気がする。今回の例で複雑になっているのはモデルだ...

      • 元増田です。ありがとうございます。 モデルで発生するイベントが多く、複雑になるほど、ビューとの関連は密になる。 ここの所は、今回の例ではいまいち見えづらい気がする。 ...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん