はじめまして。RMSプロジェクトnitoliです。
今年の3月に新しく工房に入りました。以後たまに出会うと思うので、よろしくお願いします。

前回の投稿で、バックエンドの開発がGoで行われると紹介しました。
ぼくもバックエンドの開発に携わっているので、Goの話をしようと思います。

 

初期設計をしよう

Goを扱うのは今回がはじめてで、これまではC#を使っていました。
C#はオブジェクト指向言語で、きれいな文法をしているのが特徴で、その経験を活かせるのでは?と思って意気揚々としておりました。

クラス図を書いてみた

今回はWebサーバを作るので、さくっとページを表示する部分の設計を行いました。

  • Client メイン関数にあたる部分
  • Router gin.Engine。リクエストを受取ってレスポンスを返すWebサーバの根幹
  • Controller ページの見た目や動きを管理する
    • SomethingControllerA Controllerの子クラスとして、実際の各ページを表す
  • View ページの見た目だけを取り扱う。Controllerに使われる
  • Behavior ページのふるまいだけを取り扱う。Controllerに使われる

RouterがObserverパターンと呼ばれる方法で書かれていたので、自分で作る部分もObserverパターンに従おうと考えました。
など、そこそこがんばってきれいな設計にできたのですが…。

 

課題に直面

オブジェクト指向の言語は一般的に用いられています。設計もそのとおりに従いました。
Goはオブジェクト指向も書けると紹介されていたので。

オブジェクト指向 書ける。

どうもぼくの設計をGoで実現しようとすると、とても回りくどく書くハメになるようでした。
回りくどく……いわゆる黒魔術というもので、何をやっているかが理解できるまで時間がかかるようなコードです。

どうやら、自分の知っている世界とは違う世界に足を踏み入れてしまったようでした。

Hello, World!

Goにはクラスが存在しないどころか、オブジェクト指向言語ではありません。
構造体とクラスは見た目は似ているのですが、構造体はデータが、クラスは責任が内包できます。
少しの違いに見えますが、世界が変わります。

オブジェクト指向でできた、書く量を減らし、変更に強くするプログラミングはできないということでした。
もうすこし指の筋肉に訴えかける必要が、Goに慣れる必要があるようです。
郷に入れば郷に従え、もとい、Goに入ればGoに従えとはよく言われていたのですが、こういうことだったのですね。

IT業界は日進月歩、今日もまた入門からスタートなのでした。

 

そんな感じです。RMSプロジェクト、nitoliでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)