失敗談 技術

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

投稿日:

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

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

-失敗談, 技術

執筆者:

関連記事

gradleのcommandLineでリダイレクト

gradleというビルドツールがあります。なぜかRPMを作成するのに使ってます。Ansibleも使ってるんですがね。。 それはともかく、ここの通りなのですが、例えばls -lRの出力を、プロジェクトデ …

Djangoのurls.pyにはまった。。

けっこうハマった。。 Django 2.2.4の話。以下のエラーを修正するのに、とっても時間がかかった。 django.urls.exceptions.NoReverseMatch: Reverse …

Pythonでの勘違い(if A:)

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

新規プロジェクト参入時に考えること

派遣における労働条件 就業予定時間(変形労働時間やフレックスタイム制の適用を含む)残業の有無と量就業場所(交通ルート、オフィスの配置等)業務の継続予定期間 制服の有無 (背広かどうか)福利厚生施設の有 …

seaborn + Pandas + Python によるグラフ描画(その1: 準備編)

グラフ描画してみよう 今現在の仕事で、グラフ描画する可能性があるので、少し練習してみようと思います。 題材について 突然ですが、私は確定拠出型年金に加入しています。証券会社はSBI証券 にしています。 …

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