hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

一つしかない想定で作ってあとから複数出現してめちゃくちゃになる

ソフトウェア作ってて,最初は一つしかない想定で作るけど,あとから複数出現することになって改修するのが大変,ということがある.

最悪サーバーサイド

もう終了したサービスであったのが,ユーザーは自分のアイテムを飾れる部屋を1つ持てるという仕様だったのが,複数の部屋を切り替えられるようにして,部屋ごとに置けるアイテムのシリーズが変わって,シリーズごとにグリッドの細かさも変わるとか.とにかく大変で,全部のテーブルにあとからシリーズidを持たせたり,クラスメソッドで済んでたのをシリーズidを持つオブジェクトのメソッドにしたり,ORMのItemをRoomに渡すのをやめて,その層とは別に独立した画像合成用のItemとRoomを作ってやり取りするとか,最初からそうなってるときより大変なことになる.

最悪クライアントサイド

クライアントサイドでも同じようなことはあって,HTML内に一つしか出現しない前提で作ってると,idでCSS当てたり,$("#button").clickとかidを使ったJS書いたりして,その後そのパーツが複数出現することになると大変なことになる.idは重複してはいけないので,idやめてclassとかに書き換える必要がある.最初からclassとかで要素探していればこんなことにはならないので最悪.ただidじゃなくてclassになってればいいわけではなくて,$root.find('.button')みたいに,ルートとなる要素から探していく必要がある.最初からそうなっていると良い.
最初一つだけだったものがあとから増殖するかどうか,未来のことは分からないので,一つだけっていう想定をやめないといけない.idで書いてもclassで書いても手間変わらないので,そういうところは最初から気をつけるべき.作り終わって完成して終わりならそれでいいけど,10年後も機能追加するような場所では,将来変更しにくくなるようなコードを書いてはいけない.とはいえ,一つに制限することで仕様が簡単になったり,素早く作れたりすることもあるので,どこまでめちゃくちゃにならずに簡素に作れるか,チキンレース感ある側面もある.

ちょっとまし

最近は,GitHubに倣って,JSから触るセレクタは.js-というprefixをつけるようにしてる.もともとは,JSから触ることを示して,CSS設定するためのクラスから独立させるというアイデアだけど,要素が複数になってもよいので,ちょっとまし.

Try to prefix all javascript-based selectors with js-. This is taken from slightly obtrusive javascript. The idea is that you should be able to tell a presentational class from a functional class. Most of the codebase doesn't do this, let's try and move toward it.

JavaScript · Styleguide · GitHub