プラグイン開発でクリーンアーキテクチャになるよう意識したこと

最近Chrome, Firefoxでのプラグイン開発を行ったので、その時気をつけたことなどまとめてみたいと思います。通常のWEB開発とはまた違った経験ができたので面白かったと思う。

疎結合高凝集を意識した

全体的な機能の凝集度を上げれる様にするため、細かいレベルでの機能に分割した。例えばDOMにイベントハンドラを登録するだけの機能や定期的にイベントを発火するだけの機能、それからPostメッセージでやり取りするためのPortを管理したり、タブを管理するための機能などドメインに限らず細かく適切に責務を与える様にして凝集度が上がる様に気をつけた。
ただ最初から凝集度が高くなる様に実装したというよりかは、ある程度動きに問題が無さそうで機能として独立させても良い気がした段階でリファクタリングをする様に心がけていた気がする。この辺りは一発で完全に作るというよりかは段階を踏んで改善していくことができたと思う。

結合度について、凝集度を高くしていくことで機能毎での独立性をあげることができていたと思う。基本的にコンポーネント内で管理する変数はコンポーネント内でのみ利用する場合はメソッド経由で参照ではなく値を返す様にしていた。とは言ってもいろんなところで扱う変数,stateも出てくるが、これについては更新を許可、参照のみ許可などをレイヤー毎に分けることで想定外の依存が存在しない様にし結合のレベルをコントロールできる様に気をつけた。

疎結合高凝集の実現方として、レイヤ間では低結合になる様にしレイヤ内では高凝集となる様レイヤを意識するのが良さそうに思った。またこの時処理フローの流れを一方向になる様にすることで全体の流れが大分把握しやすくなる様に感じた。

疎結合高凝集を意識して作ったメリットとして変更に強いシステムになったと思う。例えばPostメッセージで送る対象がhostが同一のタブからタブの開いた元と、開いた先のタブに対してのみPostメッセージを送る修正をしたのだが細かい修正で対応することができた。

最近Clean Architecture 達人に学ぶソフトウェアの構造と設計を読んでみたけどSOLID原則とかも結局は疎結合高凝集の方法な気がした。

サーバサイドのAPI開発などでデータの登録、更新、削除等が必要な場合はドメインモデルをよく考える必要があると思うけど、今回のプラグイン開発ではAPIの結果をどう表示するかとかリクエストを投げたりするくらいでドメインモデルについてはそこまで考えなくても問題なく実装できた。