0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

良いコード悪いコードで学ぶ設計入門 【8~9章】 まとめと感想

Last updated at Posted at 2023-05-30

こちらの記事の続きです。

8章 密結合

この章では密結合になるとどのような問題があるか、どのようにして密結合を解消するかが記述されていました。

結合度・・・クラス間の依存を表す指標

密結合の問題点

  • 処理の一部を変更した時に密結合しているクラスの挙動に影響を与える可能性がある。
  • 単一責任の原則を外れてしまう。

どのようにして密結合を解消するか

  • 責務が単一になるようにクラスを設計する
    「クラスが担う責任はたった一つに限定すべき」という設計原則に基づきクラスを設計することで密結合を解消する手法が記載されていました。

感想

結構このあたりからボリュームが増えてきて紹介しきれなかったのですが、DRYにしすぎて異なった概念の処理を共通処理で書いたりすると、密結合に陥りやすいという内容の記述があり結構目からウロコでした。

9章 設計の健全性をそこなうさまざまな悪魔たち

この章ではよくある悪い設計を紹介していました。

  • デッドコード
    どんな条件でも決して実行されることがないコード

  • YAGNI原則
    You aren't going to need it
    明確に言語化されていない仕様を先回りして実装すること

  • マジックナンバー
    コード内に出てくる3066などの特定の数字。実装者以外がなぜその数字になっているか分からず可読性低下を招く危険性がある。(時間が立つと実装者ですらなぜその数字にしたかわからなくなる事が多い)

  • 文字列型執着
    異なる種類のデータを1つの文字列として保持すること。

  • グローバル変数
    どこからでも参照可能な変数。

  • null問題
    返り値がnullであることを想定できていなかったときに、エラーが発生する問題。

  • 例外の握り潰し
    例外がthrowされたときに、その例外をcatchしたにもかかわらず何もしないこと。

  • 設計秩序を破壊するメタプログラミング
    プログラミングの構造自体をプログラミングすること。黒魔術と呼ばれることもあり、使い方を誤ると非常に危険。

  • 技術駆動パッケージング
    model, view, controllerなど記述単位でフォルダを分類すること。理想は関心事ごとにフォルダ分けすること。

  • サンプルコードのコピペ
    タイトルの通り。

  • 銀の弾丸
    難しい問題が特定の新しい技術1つですべて解決する、とういうことは無いということ。

感想

知っているものも多くありましたが、技術駆動パッケージングがあまり良くない構造で紹介されていたのは結構驚きでした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?