失敗談 技術

悪いほうが良い? でも限度があるよね。。

投稿日:

自分のその時の状態によって結論が変わる

https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00620/040900010/
を見て書こうと思いました。

今やってる仕事は、いわゆるシステムのリプレース案件(Webアプリ)だったりします。

なぜリプレースするかといえば、システムで新しい要件が追加される予定なのを小手先で切り抜けるのではなく、もっと自動化しようという理由です。

中身がきれいだったらリプレースしなくていいのでは

そのシステムはJavaで出来ていて、seasea2が使われてます。通常なら、真っ当に設計してあれば、そのシステムに追加すればいいはずなのですが。。

「独特の」設計をしているので、修正がしにくいです。以下の感じ。

  • コントローラの関数が700行に及ぶ
    • 一番の中心処理はコントローラにべた書きしてある。関数分けさえしてない。
  • 関数がコピペでできている
    • しかも同じパターンで3回ぐらいコピーされてる感じ
  • DTO(Data Transfer Object )がたくさんあるが使われてない
    • 関数全部にDTOが引数、戻り値に設定されてる
    • そういうもんですかね。。まぁ議論があるかもしれませんがDTOはインタフェースを合わせる目的で設定するならともかく、全部の関数にDTO設定しても意味ないと思うのですが。
  • ログがたくさん出ているのでコードが見ずらい
    • これも議論があると思いますが、あまりにログだけ出してもな。。
    • APIの入出力とかは必要だけど、他のdebugログとかはどうですかね。。
  • 「未設定」という仕様がある
    • ある名称をAPIから引っ張ってきて表示する仕様になってるが「未設定」とででくる、、、仕様だそうだ。意味が分からない。それなら出力しなきゃいいだろうに。
  • if文の嵐
    • インデントが深すぎる。最近のプログラムの作成方法ではインデントは深くしないのが普通です。
  • DAOの自動生成を使わず、全部自分でSQL文を書いてある
    • S2Daoは自動生成できるはずなのに、なぜか全部SQL文を記述してある。
    • これも議論はあると思うけど、ありきたりのものだと、自分で書く意味ないんじゃ。。コーディンクに無駄な時間がかかるだけだ。コーディングはしないで済むならしない方がいい。
  • オブジェクト指向設計がほぼ見られない
    • 構造化設計、というよりコントローラにべた書きしただけなんじゃ。。
  • DB設計方針が不思議
    • いまどきIPアドレスを格納するのに、4オクテットを別々のカラムに切り出すのはどうですかね。。しかもIPアドレスを数値として、別の1カラムに入れてあるという。。二重にしただけやんけ。間違いが増えるだけだろう。
    • 理由は「検索に遅いから」ということらしい(と作業メモに書いてあった)がんなわけはないだろう。
    • 実際、私が今実装しているのでは全然そんなことはない。

ちょっといい所

結局、それをpython(Django)に入れ替える方針になりました。疑問に思う点はありますが、いい所もあります。

  • ログがすべてメッセージ化してある
    • LOGIN_TEXT=’ログインしました’ 、みたいな画面表示する文言をちゃんとメッセージ化してある。 ActionMessages というものらしい。
    • Djangoにもあるので作れるのだが、、私がめんどくさがり屋なので今のところ使っていない。
    • あれって、二か国語(日本語と英語)を使用するようなところは必須だと思うけど、日本語だけだと意味薄いよなーと思って使用してません。
    • 使用してないけど、その習慣は悪くない。

ぐらいしか思いつかない。。

なんでseaser2からああなったか、というぐらい、、ちょっと悲しい状態になってる。

結局完全とっかえ

してます。

まず仕様見る。分からなかったらJava見る、みたいな感じで開発してます。。

-失敗談, 技術

執筆者:

関連記事

最近の故障/修正物

近年で故障し、しょうがないから修理、というか購入したもの、及び顛末を書いてみます。 ハードディスク・レコーダー ちょっと前から調子が悪く、電源がつかなかったり、ついたと思ったら、録画物のリストがおかし …

Dockerを使用してGo言語の開発環境を構築する

なんとなくGolangのブロジェクトに機能追加しようと思いました。 Golangの開発用に、Dockerfile等を準備する手順を書いておこうと思います。 サンプルにnfpm サンプルとして、Fork …

pipenv + Apache + Django起動設定

仕事でwebアプリケーションを作成しています。 Djangoで作成し、webサーバをApache、環境をpipenvで設定したpython3環境上で動かす予定です。 Apacheが起動するまでに、苦労 …

Ubuntu 20.04のMySQL8.0.22でrootパスワードをリセットする

小ネタです。 休みなので 久しぶりにローカル環境のUbuntuでMySQLにアクセスしようとして、パスワードを見事に忘れたことに気づきました。 ubuntu 20.04なので、以下の手順でパスワードの …

Nuxt.js – CRUDアプリケーションのフォーム/一覧を作成する

前回で作ったAPIのフロントエンドアプリケーションを作ろうと思います。 どういうアプリ? サンプルとして作ったAPIが住所録的だったので、住所録を作りました。 以下の機能があります。 登録(確認付き) …

google オプトアウト Click here to opt-out.