3期無料レッスン-2


タスク#タスク#


ミッション-レーシングカーゲーム
マイコード
今回のゲームのロジックも簡単です.
今回の完全なコードの展示はあまりよくないと思います.
これからはもっと勉強しなければならない部分だけを議論します.

パッケージ構造

  • racingcar
  • car
  • Car
  • Cars
  • domain
  • GameController
  • valid
  • Validator
  • view
  • InputView
  • OutputView
  • Application
  • レビューポイント


    事前準備?


    ソフトウェアシステムは、アプリケーション・オブジェクトを作成し、相互に関連付けられる準備プロセスと、準備プロセス後のランタイム・ロジックを分離する必要があります.
    Clean Code - Robert C. Martin
    あちこち探して、やっとこんな文章を見つけました.
    システムの作成と使用を分けるというようですが...
    このゲームのメインアプリケーションで使用するオブジェクトを作成します.
    オブジェクト間の依存関係を確立します.
    ランタイムロジックを実行します.
    InputView.java
    public List<String> inputCarName() {
            List<String> carNameList = new ArrayList<>();
    
            System.out.println(INPUT_CARS_NAME_MESSAGE);
            String carNameString = scanner.nextLine();
            StringTokenizer stringTokenizer = new StringTokenizer(carNameString, TOKENIZER_DELIM);
    
            while (stringTokenizer.hasMoreTokens()) {
                carNameList.add(stringTokenizer.nextToken());
            }
    
            return carNameList.
                    stream()
                    .filter(Validator::validationInputName)
                    .map(String::trim)
                    .collect(Collectors.toList());
        }
    使用するCarの名前を入力するのは、プリセットロジックです.
    実行時ロジックであるかどうかは不明です.
    この値は検証された後,Carsオブジェクトに移動して論理を行うなど,単純に予め用意されたデータと考えられるため,多くの役割を果たす可能性がある.

    ソースオブジェクトの静的変数


    Car.java
    private static int maxPosition = 0;
    Cars.java
    public List<String> getWinnerList() {
            return cars.stream()
                    .filter(Car::isWinner)
                    .map(Car::getName)
                    .collect(Collectors.toList());
        }
    優勝者を区別するために静的変数maxPosionで確認した
    まだコンセプトが弱いような気がします.
    レベル1のセットに変更と再割り当てがない場合は、元の値にアクセスできますか...?
    一級コレクションを復習...

    DTOの使用


    Cars.java
    private String[] getData(String name, int position) {
            return new String[]{name, intToHyphen(position)};
        }
    Carのgetterにデータを転送してゲーム結果を出力します.
    Carsクラス外から直接Carのデータを取り出すことに粗さや一次集合の意味はないようで,getData()を作成してString[]タイプに変換した.
    でもこれはDTOだけ...
    この部分の代わりにDTOを編んだおへそはお腹より大きいと思います
    面倒くさいから弁解したのかもしれない

    ハードコーディング...?


    GameController.java
    public void play() {
            Cars cars = new Cars(inputView.inputCarName());
    
            int gameStepCount = Integer.parseInt(inputView.inputGameStepCount());
    
            OutputView.printGameMessage();
            while (gameStepCount > 0) {
                List<String[]> carData = cars.nextGameStep();
                OutputView.printGameStep(carData);
                gameStepCount--;
            }
    
            List<String> winnerList = cars.getWinnerList();
            OutputView.printGameWinner(winnerList);
        }
    毎回ゲームを行う回数は、数字で行います.
    でも0度ハードコーディングだと思います
    私はずっとあれこれ考えていたが、見つけた.ハードコードだったのか.ははは
    でもどうやって取り除くのか、
    チェック関数を作成してbooleanに戻すかどうか、
    あるいは同じ方式ですが、0万定数化できるかどうかはわかりませんが...これを探しています.

    反省する


    ある先輩のコードを見て、今の開発者だと思って、とても起きられませんでした.
    私は彼に倣うべきだと思います.
    しかし、要求されていない検証をたくさんしました.
    いずれにせよ、要求事項にない検証を行う必要がある.
    もちろん検証がまじめであればあるほど...
    柔軟な入力も故意かも??
    また名前が难しいと感じた.
    英語も難しい...なんだ.これは本当に.
    他の人がどんな名前を使うかもっと見てみましょう.

    クミットをよくしなさい。


    ああ.ずっと提出を忘れて、私だけを忘れて和音を打っています.
    機能別に提出!!!!
    でも提出も難しい...
    クミセ・メセジの先輩たちを見て、感じを見つけるべきだと思います.