こんばんは。ファガイです。
今回は仕事などをやっていって、こうだったほうが困らないなぁって思ったことを書いていきたいと思います。
今回言いたいこと
今回言いたいことは以下の2つのことです。
- スコープを小さく保つこと
- コンテキストを分けること
どちらも同じような意味なので、これがこっちみたいな感じで分けて書いていません。
お金でエイヤッとリプレイスできる会社はレガシーなアプリケーションはリプレイスしたほうが良いでしょう。
途中からはお気持ち文章になっていくので、最初の方だけ見ると良いかもしれない・・・
例:フロントエンドの話
これはフロントエンドassetsの話になります。しかしながらこの考え方はアプリケーションにおいても同じことが言えると思います。
例えばですが、アプリケーションがPC表示とSP表示に分かれていたとします。(フロントと管理画面とかもそう、cssとかがガラッと別物になる場合)
何も気にせずにPC表示とSP表示のcssなどを分けようとおもったとき、
public
├ css
│ ├ pc.css
│ └ sp.css
├ js
└ img
こんな感じに同じディレクトリ内に配置してしまいがちです。
これは、アプリケーションが小さければ特に影響はないです。しかしながら、アプリケーションによって他にも表示デザインが異なってくるページが出てきたりするとこのディレクトリにたくさんのcssファイルが出来たりしてどれがどこで使われているのかわかりにくくなりがちです。
コンテキストを分離して、スコープを小さく保つ場合
たくさんのcssやjsファイルが出来てしまって、どれがどこで使われているかわからなくなってしまうのを防ぐためには先にディレクトリを切ってしまってきっちりPC版をSP版でコンテキストを区切ってスコープを小さくすることが良いです。
public
├ pc
│ ├ css
│ │ └ pc.css
│ ├ js
│ └ img
└ sp
├ css
│ └ sp.css
├ js
└ img
これは最初からpc版をディレクトリ切っておいて考えてないとアプリケーションによってはつらいかもしれません。
まあ、pc版だけはrootに置いて、それ以降のデザインが変わるシステムは別ディレクトリとして切って管理するというのが妥協点かなと思います。
既存アプリケーションにおいては、多少複雑化するかもしれませんが分けて管理する方向にしたほうが後々の心理的安全性が確保できるので良いと思います。(ただしドキュメント化とそれをメンバーに広める必要がある)
上記のようなディレクトリ分けにしておくとどれがどのシステムに影響を及ぼすのかがすぐにわかるので非常に良いです。新しく入る人にも優しい。
アプリケーションでやれそうなこと
今回書こうと思ったのが上記のフロントのディレクトリの話だったので、あまりアプリケーションのことは考えてなかったですね。。。
なので、お気持ち文章にほぼほぼ近いです。私が今後意識していくぞーみたいなことを書いていきます。
言いたいことはフロントエンドのことと同様、コンテキストを分けてスコープを小さく保つことです。
そういった点を考えれば、ドメイン駆動設計といった考え方はレガシーアプリケーションを抑えるのによいアプローチだと思います。
ただドメイン駆動設計は学習コストが大きく、理解が人によって異なったりする。。。
私自身もドメイン駆動設計のドメくらいまでしかわかってないですが、ドメインの要素の洗い出しをするのは非常に重要だと感じています。(今後知識がついてくればこの手の知識をアウトプットしたいです。。。)
コンテキストで分離してスコープの範囲をわかりやすくする
とりあえず一番やるべきはコンテキストでぶつ切りにすることだと思います。
実際にアプリケーションを開発していて、ControllerだったりViewだったりで中でディレクトリが切られてシステムが別になってることが多いのですが(私が今やってるアプリケーションもそうです、というか私がそう切ってしまいました)、早い段階でコンテキストを分離して管理しておくことがいろんな人が入ったとしても問題にされにくいシステムになると思います。
スコープの範囲を小さくするためにも、関係性のある要素は近くに置くように
これはドメイン駆動設計などにも関係する要素かもですが、例えば商品(Product)という要素があった場合に商品に紐づく情報は近い場所に置くということです。
こういうのはディレクトリを切ってしまって管理するのが良いでしょうね。
どこまでやるべきかはなんともですが、ドメインモデルとして管理できるようにしても良いと思います。
最後に
ということで、途中からお気持ちに近い文章になってしまったのでなんとも説得力に欠ける文章になってしまいした・・・
でもこのコンテキストを分けてスコープを小さく持つという考えはどんなところでも活用できそうで、今後も意識して書いていこうと思います。
コメント