LoginSignup
1
0

More than 3 years have passed since last update.

3ヶ月のJavaとSpring研修を終えて

Posted at

書いた目的

マークダウン記述法の理解
自分用のメモ

これまでのプログラミング経験

HTML,CSS,JavaScript,php
Vue,Laravel
バックエンドは苦手であり、フロントエンド周りを中心にスクールをきっかけに独学で勉強をしていた。

Javaに対して純粋に感じたこと

  • 良かった点

    • 1つの処理を記述すれば、あとは特に考えずデータを渡してやればいいので楽
    • 実行前にエラーが大抵わかる
    • 型指定が厳しい為にデータの扱いがきちんとできる
    • そもそもプログラミング言語とは?が学べる
    • ハードに依存しない
  • 悪かった点

    • とにかく記述量が多い
    • 冗長になりやすい
    • 型が厳密すぎて初学者にはハードルが高い
    • モダンじゃない
    • ウォーターフォールになりやすいかも
    • 学びのコスパが悪い
    • 必然的に時間がかかる

Spring(SpringBoot)に対して純粋に感じたこと

  • 良かった点

    • アノテーションがめちゃくちゃ便利
    • MVCで分かれているのでエラー箇所を突き止めやすい
    • 規約重視なので他人のコードも読みやすい
    • 同じ処理の再利用が考えやすい
  • 悪かった点

    • 自ページに戻る可能性があるControllerの記述はどこのページの何の処理か不明になる場合がある(個人的)
    • アノテーションが便利なので基本的なエラーに気づけない可能性(初学者の場合)
    • 冗長になりやすい
    • STSツールのバージョンなどがわかりづらい・・・。

何を作ったのか?

ECサイト

 実装項目
  管理者とユーザー毎のログイン機能(SpringSecurityは使用不可)
  カート機能
  ページング
  DBへの新規登録、更新、追加、検索、複合条件検索、論理削除

レンタカー予約サイト

 実装項目
  上記の4項目
  管理者のフラグ判別でのページルーティング
  DBのテーブル結合によるデータ抽出、修正

開発環境(verは省略)

  eclipse

  Spring tool suite3
   Spring Boot
   Spring Jdbc
   Spring Web
   Bean Validation

  Thymeleaf
   
  MysqlWorkBench
   AWS S3

開発で詰まった点

ネットのリソースが古い

詰まる度にぐぐるが、結構前の記事が多かった。
動かないわけではないが、モダンな書き方や技術なのかが不安になった。

Modelの種類はどこまで切り分けるべきか

DBに合わせてEntityを作っていたが、EntityはViewに直接表示すべきでないと言われたので、表示用のModel(コード内容はコンストラクター以外はEntityと全く同じ)を作りコンストラクターの引数にEntityを指定し詰め替えを行っていた。
ここはCloneメソッドでもいいかと思ったが、Cloneをする必要はないとのこと。
一番悩んだのが、DBのレコード更新などでForm用のModelを作るべきかという点。
研修が全て終わって聞いたところによると、プロダクトによるとのことだった。
Modelは基本的に切り分けずに、一個のModelで行っていいとのことだったが将来的にDBの内容が変更になる可能性がある場合や、大規模開発の場合などは切り分けてModelを使い分けたがよいとのことだった。

型が厳格で詰まった

もう慣れたので、詰まることは少ないと思うが List<> からの値の抽出と詰替やViewで入力してDBから戻ってくる値の型が違う場合などは最初の頃はずっと詰まって進むことができなかった。
値の数やデータの型など把握すべき内容で詰まっていた。
その状況でDBのjoinが関わってきたので更に混乱した。
特にTimestampとDateは気をつけないとDBのデータとのやりとりが煩わしくなった覚えがある。

データはHttpSessionとModelのどっちで受け渡すべきか

開発中に思ったのは、バリデーションが関わったり、値が変わる可能性があるのは全てModelで受け渡しを行うべきだと感じた。
逆にほとんどの場合はセッションに保持しておき、いざと慣ればinvalidate()で全削除でいいのかと思っていた。
inputのhiddenで受け渡す方法もあるがアンチパターンになると思うので使うのを避けた。

DBとのやりとり

最も詰まったのがDBとのデータの受け渡しであった。
まず、Mysqlのエラーメッセージが親切ではなかった。
そして、データの数が多くなると何がどこまで渡されていて、現状何が入っているのかも把握できなくなっていた。
Constantsの定数で把握しやすくするのも一つの手段であったが、個人的には逆にわかりにくく使うのを避けた。

JavaとSpringの具体的に身についた知識

compareToメソッド

変数1.compareTo(変数2)

メソッドの呼び出し元の値(変数1)が、引数の値(変数2)より小さい場合は”負の値”
メソッドの呼び出し元の値(変数1)が、引数の値(変数2)より大きい場合は”正の値”
メソッドの呼び出し元の値(変数1)が、引数の値(変数2)と同じ場合は”0”
侍アカデミーより引用

日付の重複チェックなどで容易に使うことができ便利と感じた。

随時更新予定

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0