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?

ダメな設計を振り返る〜SOLID 単一責任の原則の観点から〜

Posted at

この記事は設計こばなし Advent Calendar 2023の1日目です。

概要

過去(15年前の2008年。開発経験6年目の28歳のとき)におこなった実際の開発案件を思い出し、ダメな設計をSOLID原則の単一責任の原則の観点から振り返る。

開発対象

開発対象はつぎの要件のWindows Formアプリケーション

要件

  • Windows Formアプリケーション
  • 言語: C#
  • 無線でターゲット装置の温度、無線強度を受信する
  • 無線接続状態(接続・未接続)を表示する
  • 温度、無線強度をサードパーティ製のグラフ描画ライブラリを使い折れ線グラフを描画する
  • 無線通信設定(周波数帯の選択、無線伝送速度設定)
  • 無線セキュリティ設定(暗号化の有無、暗号キー)
  • グラフ表示更新間隔設定(100ms〜1000ms)

ブロック図

block_png.png

ダメな設計

クラス図はつぎのとおり。

クラス図

class.png

改善点

クラス図から設計の改善点を考えた。

マネージャーという名の神クラス

まずマネージャーというクラス名が抽象的すぎる。
マネージャーという名のもと、管理するものがあれもこれもと集約してしまう。
神クラスになっていく兆候と思った。
クラスの責務が明確になる命名を心がけようと思った。

設定クラスが単一責務になっていない

設定クラスに設定項目のすべてが集約している。
単一責務の原則はクラスを変更する理由はひとつであること、と言っている。
このクラスは設定項目が分類されず集約されている。例えばグラフ表示更新間隔に関するロジックが変更になったときに設定クラス全体に変更影響が及ぶ可能性がある。
設定項目の関心が分離されていない、密結合な構造とも言えそうだ。
無線関連の設定項目(周波数帯の選択、無線伝送速度設定)、画面表示の設定項目(グラフ表示更新間隔)などと意味のあるグループに分類・分割し、それぞれを疎結合な構造にすることをこころがけようと思った。

感想

振り返ると当時はどう要件を実現するか実現手段に手一杯で高凝集、疎結合な設計にする、という観点まで考えることができなかった。

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?