2016-12-16 bouzuya/mr-jums の進捗
bouzuya/mr-jums をいじっている。外から見たときの機能としては変えないままに、内の実装を変えようとしている。まだまだだ。
いくつも気になるところがある。ひとまず State
と StateData
を、 State
と SerializedState
に変えようとしている。
server-side と client-side での通信時のみ SerializedState
を使い、それ以外は State
を使う。送信時に serialize()
で SerializedState
へと変換し、受信時に deserialize()
で State
へと変換する。
ほかに EntryViewer
という class
を使っていたのだけど、これをやめた。いくつかの理由がある。 this
を意識させられるのが嫌だ。操作 (method) のために new
を必要とするのが嫌だ。素の object
と function
のほうが扱いやすい。
脱線するが、 TypeScript の structural sub-typing を最近は邪魔だと感じている。互換性を持ってほしくないものを互換性のあるものとしてみなしてしまうし、構造を露出させてしまう。たとえば次の場合に困る。
interface FooId { value: string; }
interface BarId { value: string; }
本来はまったく別の Id として扱いたいが、構造で判定されると同じものになってしまう。たまたま内部構造が同じものを互換性のあるものとして見なされてしまう。
そこでやむを得ず _type: 'foo-id';
のような property を追加してごまかしている。これで互換性のないものとして扱われる。無駄はあるが、安心感はある。もう別の言語を使うべきだと感じる瞬間だ。
追記: 「最近」などと書いたが 2016-10-01 時点で既に困っている。