ライブラリのオブジェクトを返り値にしない
ライブラリのオブジェクトを返り値にすると影響範囲が大きくなって、保守性が下がります。
さっそくですが、例を見てみましょう
メソッドの返り値として、Faradayのオブジェクトを返していますが、Faradayから別のライブラリに置き換えたいとき、影響範囲が広くなっている可能性があるので、修正が大変になる可能性があります。
結論として、プリミティブなオブジェクトか、サービス内で定義したオブジェクトを返すことで、影響範囲を狭めることができます。
それではよい例です。
独自のResponseオブジェクトを返すようにしています。これにより、GoodExampleClientを使う側に対して、ライブラリに依存したオブジェクトを使用しなくなります。
ここで例えば、今までFaradayを使っていましたが、なにかしらの理由でNet::HTTPを使う必要がでてきたとしましょう。そのような場合もこのように修正できます。
これはサンプルなので、影響は少ないのですが、例えばFaradayのレスポンスのオブジェクトでは、HTTPのステータスコードを返すメソッドは、#statusを使いますが、Net::HTTPでは、#codeを使います。
一番目に示したFaradayのオブジェクトを返り値としている例では、このような少しの差でも呼び出し側の修正が必要になり、影響範囲が一気に広がります。一方で、二番目に示した独自のResponseオブジェクトを返り値に使用した場合は、影響範囲がclass内のみになります。
影響範囲を狭めることによって、安全に早く、コードの修正ができるようになります。