学校の課題のプログラミング、自分はこう考えた!という話

この記事は2017年06月09日に公開されました。 情報が古い可能性があります。

こんにちは、殿内(@tonoccho)です

現在、学校の宿題でチャットアプリを作っています。チャットの課題で求められた部分を作るだけなら30分なんですが、というか、このくらいでいいなら30分ですまでは作ったんですが、ちょこちょこと機能追加はしています。そうした方が成績いいらしいので。一応作るときに気をつけたことについていくつか書いて見ます。
宿題の概要
今回の課題はマルチスレッドとソケット通信をやることが目的でした。どちらも自分あまり得意じゃないですね。とは言え、世にチャットプログラムは山のようにありますし、参考にできるものはたくさんありますが、別に参考にしなくてもいいでしょう。

レイヤーを作って間はeventで結んだ

基本的に通信をする部分がデータを受け取ったらEventを発火する、という感じに作りました。Eventを処理するListenerはさらにFacadeとして動きます。Facadeは機能ごとに一つスレッドを立てて動かします。処理内容はRunnableで実装します。Strategyですね。Strategyの中で動く処理自体はFactoryで生成です。
Event Drivenにすることで、レイヤー間の結合がかなり弱くなったと思っていますので、そのうちTomcatでということもさっくりいけると思いました。やるかは別の話だけど。

Thread周りがだいぶ簡単になってた

Executorというのを使うことで、スレッドを立てるのがかなり簡単になってました。ただ、「一つ処理をしたら終わるスレッド」というのと、「ひたすらループして処理を待つスレッド」というのをきちんと分けないとこの辺ははまり込むかもしれませんね。スレッドは本来であればアプリケーションサーバがやるところだと思うんですが。今回はその辺も課題の範囲なので、簡易的に作りました。

Singletonは導入しやすさとは裏腹に難しい

デザインパターンの中でSingletonは、自分の性格上、全部Singletonにしてしまうことがあるくらいに自分を捉えて離さないある意味毒薬的なものだったんですが、使うたびに後悔していたのは「テストしにくい」という点でした。なので、今回はあえてSingleton使わないことにしました。使わないことでむしろ良かったと思います。Singleton使ったら殺すマンになろうと思いました(まぁ、インスタンスの管理とかを分離すればいいような気もするんだけどね)。Singletonは時としてAntipatternになっているようですし、使う必然性がないなら手を出さない方がいいでしょう。もうちょっというと「Singletonでよくね?」って思ったくらいの理由だったらやめましょう、ということで。

HikariCPというコネクションプールを使って見た

機能を追加して行く中でDBを使わなくてはならなくなったのですが、今回はH2DBを組み込みで使うことにしました。ドキュメントにセットアップ方法書かないといけないのがめんどかったので。で、コネクションの管理をHikariCPというのでやってみることにしました。単に新しかったので興味本位です。あと、Tomcatとか使うわけじゃなかったので、単体でなんか使いやすそうに見えたので。公式的には超絶高速なコネクションプールということを言いたいみたいです。

Flywayも使って見た

で、セットアップの中で「DB立ててこのSQL動かして・・・」とやるのもやっぱりめんどくさかったので、起動時にFlywayでマイグレートしちゃうことにしました。ものとしてはかなり乱暴だと思うんだけど、「サーバー起動すればいいから!」とか「アップデートしたらサーバー再起動すればいいから!」というくらいシンプルにしたかったというのもあります。

GUIはSwing

GUI周りはSwingで作りました。今後JavaFXが標準になるのは知っていたんですが、他の宿題も忙しかったので、Swingにしました。先生が幸い「Swing使っても殺さないマン」だったので、良かったです。あと15年若かったらJavaFXで頑張ったかもしれません。

ビルドとかはMaven

こちらも今ならGradleだろうとか言われるかもしれないんですが、Mavenにしました。Gradleも自分が勉強しながら使うことになるので、ちと不可高いかなと。というか、Mavenでいいじゃん、とかも思ったりします。GradleはArchetypeいつになったらサポートするんでしょうか?Gradleもあと15年(ry

ニュージーランドの最新記事

移住の最新記事

勉強の最新記事