失敗談 技術

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

投稿日:

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

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

-失敗談, 技術

執筆者:

関連記事

Django2.2 でのMySQL5.1対応

「対応」と書きながら、思い切り回避ですが。 マイグレーション時のエラー マイグレーションしたら、以下のエラーになりました。 $ pipenv run python3 manage.py migrate …

vscodeのRemote Developmentで「権限がない」と怒られた時

小ネタです。 vscodeのRemote Developmentにてパスワードなしログイン vscodeは時々使うのですが、リモート開発するのにRemote Developmentが便利なので使ってま …

PythonでAESを使用して暗号/復号する

1.つづき Pythonで、PKCS#12の公開鍵で暗号、秘密鍵で復号するプログラムの続きです。 今回はAESで暗号化/復号を行い、通信しながらRSA暗号/復号,AES暗号/復号を組み合わせたいと思い …

Python Django REST Framework(REST API)の作成

1.はじめに 今回は、pythonの「Django」というWebアプリケーションフレームワークを使用し、REST APIを作成します。作成するREST APIは、これから作るであろう、Nuxt.jsか …

Pythonでの勘違い(if A:)

勘違い 小ネタです。 Pythonでは、以下のように書くことができます。 a = [] if a: print(“not empty!”) else: print(“empty!”) 結果は以下になり …