価値があると思ったコードについて誰かがコメントし、詳細を知るためにデザインパターンを調べたかったのですが、それに関連するデザイン原則を特定するのに苦労しています。
基本的に、私はエンコーダー/デコーダーオブジェクトを持っていました。一方向では、文字列を受け取り、その文字列に関する情報を含むオブジェクトを返します(たとえば、単一の整数を持つオブジェクトを考えます)。逆方向はその整数を取り、文字列を返します。
私に与えられた推奨事項は、1つの方向が文字列を取り、オブジェクトを返す場合、逆はその同じオブジェクトを取り、文字列を返すことです。
このインターフェースの対称性は(もしあれば)どの設計原則に関係しますか?
この設計は、 逆関数 の数学的概念に対応しています。
2つの関数fとgが次のような場合:
_ f: S -> D (f takes elements in set S and maps them to elements in set D)
g: D -> S (g takes elements in set D and maps them to elements in set S)
and for any x in S, g(f(x)) = x
_
その場合、gはfの逆関数と呼ばれます。
これをあなたの問題に置き換えれば:
_ encode: object -> string
decode: string -> object
decode(encode(text)) = text
_
そして、decode()
がencode()
の逆であることに誰も異議を唱えません。