初投稿につき至らない点があるかもしれないが容赦してほしい。が、指摘は受け入れる所存。
俺はとあるUIコンポーネントライブラリ開発者だが、先日議論されたあるコンポーネントの設計について悩み続けている。
これを読んでくれた人の設計センスや知識、経験から、第三者の率直な意見を聞きたい。
悩んでいることの概要は、
ざっくり言えばこの2択だ。
どちらも間違った考えだとは思えないので、そもそもどちらかの捉え方がおかしいのだと思う。そういった意見も聞きたいが、まずは読んでみてほしい。
設計対象のコンポーネントは、よくある触って動かせるスライダーである。下記リンク先のようなものだ。
https://material-ui.com/components/slider/
加えて、下記も前提としてほしい。
Sliderというコンポーネントクラスを作るとして、これらの構成要素をライブラリ-ユーザー間でどう分担するかという点で、AさんとBさんで意見が割れた。
それぞれの意見を要約すると下のようになる。Aさんはカプセル化を狙い、Bさんは単一責任原則を重視している。
画面 └ Slider (ユーザーが作成) ├ 背景バー ├ ノブ └ 進捗バー
Aさん案の場合だと、Sliderクラス内部で勝手にそれぞれの要素を作成し、自分の子にするなりして表示する。
画面 ├ 背景バー (ユーザーが作成) ├ ノブ (ユーザーが作成) ├ 進捗バー (ユーザーが作成) └ 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だと思うんだけど謎の一般論がいつも邪魔をする・・
AもBも宗教戦争 議論のムダ その間にさっさと両方作れ
フロントって何で議論にビジネス視点で価値が薄い事に、延々と貴重なリソース突っ込むの?他にやることないんじゃないかと思うけどどう思う? 例えばバックならカネに絡むビジネス...
フロントは発展途上なんだよ
なんかさ、フロントって何がやりがいなの??って。どうせ今議論してるような内容も来年には陳腐化するじゃん? AIならつぎ込んだ時間は年々君のストックになって給料に結びつくよ...
コーダー脱出したらフロントでしたの巻
フロントのコーディング規約メチャメチャなのは何故?作るものより作り方を何度も何度も変えたり、非生産的だよね??
未熟者故普段あまり利益とかを見据えていないせいか、イメージがわかないがありがとう。 そういう実感が湧いてきたらバックエンド考えてみる。