###前提・実現したいこと
質問させていただいた意図としては、
オブジェクト指向として適切な設計というのを理解したいという背景がございます。
タイトルはうまくまとめることができなかったので、例題としての内容を記載させていただきました。
下記の問題に沿ってご回答がいただけますと幸いです。
###発生している問題
Unity/C#でゲームの製作するにあたって、ゲーム内のキャラクター用のクラスを実装しています。
キャラクターは、移動をはじめとした様々なアクションを行うことを想定しています。
が、これをキャラクターのクラス内でガシガシ書いていくと、
将来的なことを考えるとぶくぶくと肥えていきそうな懸念があります。
そのうえ、単一責任の原則から見るとあまり好ましくなさそうなので、
アクションごとに切り分けることにしました。移動も例外なく切り分けます。
移動はキャラクターによってまちまちなので、移動用のインタフェース(MoveInterface)を作り、
その上に歩行(Walk)、ワープ(Warp)と移動方法毎のクラスを用意しました。
このような形で各々のアクションについても実装することで役割がはっきりするとおもうのですが、
最終的にこのキャラクターをプレイヤーが動かせるようになった場合に、
結局インタフェース上に存在するMoveTo()やStop()をCharacterクラスの外から呼び出す必要が出てくるため、
自分のやっていることがラッパクラスを作っているに過ぎないのではという疑念が浮かび、
しっくりきていません。
疑念が晴れず、以下のコードのような設計がオブジェクト指向として適切なのか、
悩みが尽きません。
本来はどのような実装が適切なのか、ご指摘を賜れればと考えております。
よろしくお願いいたします。
※Unityならコンポーネント指向だからそもそもオブジェクト指向を使う意味が分からない、
という話は今回はご容赦いただけますと幸いです。
###該当のソースコード
C#
1public interface MoveInterface 2{ 3 void MoveTo(Vector3 destination); 4 void Stop(); 5} 6public class Walk : MoveInterface 7{ 8 // 中身は割愛 9} 10public class Warp : MoveInteface 11{ 12 // 中身は割愛 13} 14 15class Character 16{ 17 private MoveInterface _moveLogic = new Walk(); 18 19 public void MoveTo(Vector3 destination) 20 { 21 if (null != _moveLogic) 22 { 23 _moveLogic.MoveTo(destination); 24 } 25 } 26 public void Stop() 27 { 28 if (null != _moveLogic) 29 { 30 _moveLogic.Stop(); 31 } 32 } 33}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/28 02:32
2017/01/29 12:44
2017/01/31 02:18