最近、醜いコードと思われるコードをクリーンアップする方法について質問しました。推奨事項の 1 つは、必要な機能を実行し、必要なものを返す拡張メソッドを作成することでした。私の最初の考えは「素晴らしい!拡張機能ってなんてクールなの...」と思いますが、もう少し考えてみると、拡張機能の使用について考え直し始めています...
私の主な懸念は、拡張機能がカスタムの「ショートカット」であり、他の開発者が従うのを難しくしているように見えることです。拡張機能を使用するとコード構文が読みやすくなることは理解していますが、カーテンの後ろの声に従うのはどうでしょうか?
たとえば、以前の質問のコード スニペットを見てみましょう。
if (entry.Properties["something"].Value != null)
attribs.something = entry.Properties["something"].Value.ToString();
次に、拡張機能に置き換えます。
public static class ObjectExtensions
{
public static string NullSafeToString(this object obj)
{
return obj != null ? obj.ToString() : String.Empty;
}
}
次の構文を使用して呼び出します。
attribs.something = entry.Properties["something"].Value.NullSafeToString();
確かに便利な方法ですが、別のクラスオブジェクトのオーバーヘッドに本当に価値があるのでしょうか? 誰かが私のコード スニペットを再利用したいが、拡張機能を理解していない場合はどうなりますか? 同じ結果の構文を同じように簡単に使用できたはずです。
attribs.something = (entry.Properties["something"].Value ?? string.Empty).ToString()
そこで、少し掘り下げて、拡張機能を使用することの長所と短所について話している記事をいくつか見つけました。興味のある方は、次のリンクをご覧ください。
どちらが良い方法なのか、一概には言えません。自分のやりたいことを実行するカスタム拡張機能、または同じタスクを達成するためのより多くのコードが表示されますか? 「本物の」開発者がこのトピックについてどう思うか知りたいです...