Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

全体レビュー #20

Open
shinyasakurai opened this issue May 21, 2020 · 0 comments
Open

全体レビュー #20

shinyasakurai opened this issue May 21, 2020 · 0 comments

Comments

@shinyasakurai
Copy link
Collaborator

shinyasakurai commented May 21, 2020

共通

  • メソッド名や変数名は全体的に良くできていると思います👍

  • このくらいの規模なら問題ないんですが、早めにコメントを書く癖をつけておくと良いと思います!コメントには分かりにくい部分の説明なぜそう実装したのかなどを書くのがオススメです。

  • 前にも少し話しましたが、クラス名は大文字始まりのキャメルケースで記述するのが一般的です。
    また、モデルは単数形でテーブル名は複数形にするのが一般的です。

models

  • インスタンス変数だとどこかで値が変更されてしまう可能性があるので、テーブル名のような不変な値はオブジェクト定数を使うのがオススメです。
    https://www.php.net/manual/ja/language.oop5.constants.php

  • モデルは基本的にテーブルに合わせるのがオススメです。
    今回の場合は中間テーブルを除いた Article, User, Image, Tag, Thumbnail の5つがあると良いかなと思います。

  • ここはpublicよりもprotectedの方が良いかなと思います。publicだとコントローラーなどから$pdo経由でデータベースにアクセスできてしまいますが、protectedなら自身と継承したクラスのみに限定できます。

    public $pdo;

    https://www.php.net/manual/ja/language.oop5.visibility.php
    private, protected, publicをうまく使い分けて最小限のアクセス権限で実装できるとより安全で良い設計になります。

  • エラーの場合に直接exit()していますが、終了する前に以下のことができるとより良いと思います。

    • ログファイルにエラー内容を書き込み
    • 適切なステータスコードを設定する
    • エラーページを出力する
  • ユーザーのパスワードを現在そのままDBに保存していますが、万が一不正アクセスによってデータが盗まれた場合にパスワードが漏洩してしまいます。
    これを防ぐためにパスワードは復号できないようにハッシュ化して保存しておくのが一般的です。
    ログインの際にはハッシュ値同士で比較してパスワードの正当性を検証します。

    $stmt->bindParam(':password', $password, PDO::PARAM_STR, 100);

features

  • いくつかの箇所でドキュメントルートの/var/www/htmlを直接記述しているところがありますがサーバーが変わってドキュメントルートが変わった場合に変更が面倒なので 、$_SERVER["DOCUMENT_ROOT"]を使うか定数としてどこかにまとめておくと便利かと思います。(今回はVirtualHostを使っているので$_SERVER["DOCUMENT_ROOT"]は使えないかもしれないです)

    $file_dir = '/var/www/html/images/';

    https://www.php.net/manual/ja/reserved.variables.server.php

  • Webを支える技術で既に読まれたかと思いますがステータスコードは成功系だけでもいろいろあるので、リソースの作成時には201を返すなど適切なステータスコードを設定できるとより良いと思います。
    https://developer.mozilla.org/ja/docs/Web/HTTP/Status

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant