失敗談 技術

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

投稿日:

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

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見る、みたいな感じで開発してます。。

-失敗談, 技術

執筆者:

関連記事

Rustのお勉強をしてみる(XMLRPCクライアント編)

なんとなく手付かずだったので、Rustの勉強をしてみようと思います。 手始めとして、なぜかXMLRPCクライアントを作ってみます。 環境 WSL2 Ubuntu 22.04 LTS Rustインストー …

リモート実家帰りしてみる

このご時世、実家には直接帰れないけど、1月には一応実家帰り的な感じでリモート実家帰りをしようかと思いました。 リモートは大変。。 一応実家には自分で設置したインターネットや無線LANがあるので、Zoo …

故障物(8インチタブレットからBMAX MaxPad l11に)

ついに故障 ついに8インチタブレットがほぼ故障しました。「ほぼ」というのは、バッテリーが使えずずっと電源線に繋げてないと使えないからです。 それではタブレットの意味がありません。 つぎは10インチタブ …

CentOS7 + Django2.2 + uwsgi + nginx 連携方法

Djangoとnginx連携方法 以前はApache経由で連携しましたが、今回はnginxと連携する方法を記述します。 環境 設定した環境は以下です。 OS: CentOS7Python3.6.8 ( …

暗号モードによる処理時間の違いを測定してみた

はじめに 前回、AESで暗号化する実装をしてみた際、知らない暗号モードが増えたなと思いました。 なので、どの暗号モードを使用すべきかの、判定材料の一つとして、代表的な暗号モードの処理速度を簡単に計って …

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