2019-08-07

単一責任原則vsカプセル化

投稿につき至らない点があるかもしれないが容赦してほしい。が、指摘は受け入れる所存。

俺はとあるUIコンポーネントライブラリ開発者だが、先日議論されたあるコンポーネント設計について悩み続けている。

これを読んでくれた人の設計センス知識経験から第三者の率直な意見を聞きたい。

悩んでいることの概要は、

ざっくり言えばこの2択だ。

どちらも間違った考えだとは思えないので、そもそもどちらかの捉え方がおかしいのだと思う。そういった意見も聞きたいが、まずは読んでみてほしい。

設計対象コンポーネントは、よくある触って動かせるスライダーである。下記リンク先のようなものだ。

https://material-ui.com/components/slider/

前提として、このコンポーネント構成要素を下記とする。

加えて、下記も前提としてほしい。

Sliderというコンポーネントクラスを作るとして、これらの構成要素をライブラリ-ユーザー間でどう分担するかという点で、AさんとBさんで意見割れた。

それぞれの意見を要約すると下のようになる。Aさんはカプセル化を狙い、Bさんは単一責任原則を重視している。

Aさんの構成イメージは下記のような感じ

画面
└ Slider         (ユーザー作成)
   ├ 背景バーノブ
   └ 進捗バー

Aさん案の場合だと、Sliderクラス内部で勝手にそれぞれの要素を作成し、自分の子にするなりして表示する。

Bさんの構成イメージは下記のような感じ

画面
├ 背景バー     (ユーザー作成)
├ ノブ         (ユーザー作成)
├ 進捗バー     (ユーザー作成)
└ Slider       (ユーザー作成)
   ├ 背景バーへの参照    (ユーザー指定)
   ├ ノブへの参照        (ユーザー指定)
   └ 進捗バーへの参照    (ユーザー指定)

Bさん案では、ユーザー構成要素それぞれを作成し、Sliderにそれを食わせる。

SliderはAさん案のように各構成要素を構築する必要はなく、ノブの移動や進捗バーサイズ変更だけすれば良い。

Aさんはユーザー制御する必要のない背景バーノブ、進捗バー構成隠蔽(カプセル化)しようと提案したが、

Aさん案に対しBさんは、単一責任原則観点から「各構成要素の構築や表示」という責任を外すべきだと訴え、Bさん案を提示した。

またBさんは、コンポーネントユーザーが扱うべきものであり、コンポーネントコンポーネントを内部で勝手使用しているのは混乱を招くとの見方もしている。

ただしAさんの考えの通り、実際に各要素の構成ユーザー制御するユースケース存在しない。

その場では「単一責任原則」を持ち出したBさん案で決定された。

しかしなんとなくAさん案派だった俺はモヤモヤしたまま家に帰り、本当に単一責任原則に反しているのか、カプセル化よりも大事なのかと悩み続けている。

ここまでが事実となる。

さて本当にBさんが正しかったのか、あるいは単一責任原則の捉え方が間違っているのか、はたまた・・

第三者による意見が聞きたい。周りのコメントに左右されない率直な意見が望ましい。なんとなくな意見も歓迎する。

満たすべき機能は見た目だけではないがそこは置いておいてほしい。

以下は個人的意見とか思ったことや疑問など。

  • Qiitaでやれ

    • Qiitaにも垢作って投稿してみた。ありがとう https://qiita.com/mpbo12345/items/4a3569c6784ac0e5d479 そしてすまない、やはりID無しで意見もらえる場所もほしいのでこれは残させてもらう

  • これ、ホントにシンプルな Slider のことだけを考えているならA案の方が、 Slider をたくさん増やしたときとか分かりやすいと思うけど、 UI一般論で考えるとB案も割とあり得るかなぁ...

    • そうなんだよね、増やしたときを考えるとAだと思うんだけど謎の一般論がいつも邪魔をする・・

  • フロントって何で議論にビジネス視点で価値が薄い事に、延々と貴重なリソース突っ込むの?他にやることないんじゃないかと思うけどどう思う? 例えばバックならカネに絡むビジネス...

    • フロントは発展途上なんだよ

      • なんかさ、フロントって何がやりがいなの??って。どうせ今議論してるような内容も来年には陳腐化するじゃん? AIならつぎ込んだ時間は年々君のストックになって給料に結びつくよ...

        • コーダー脱出したらフロントでしたの巻

          • フロントのコーディング規約メチャメチャなのは何故?作るものより作り方を何度も何度も変えたり、非生産的だよね??

    • 未熟者故普段あまり利益とかを見据えていないせいか、イメージがわかないがありがとう。 そういう実感が湧いてきたらバックエンド考えてみる。

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん