質問
ソフトコーディングのアンチパターンの簡潔で紛らわしいウィキペディアエントリを見つけました。それでは、ソフトコーディングとは何ですか?どのような設定でそれが悪い習慣ですか(アンチパターン)?また、いつそれが有益であると考えられるか、もしそうなら、どのように実装されるべきですか?
解決
簡単な答え:ハードコーディングを避けるために極端に進み、最初からハードコーディングされた値があった場合よりも悪い状態を維持するために、モンスターの複雑な抽象化レイヤーで終わること。つまり、オーバーエンジニアリングです。
いいね:
SpecialFileClass file = new SpecialFileClass( 200 ); // hard coded
SpecialFileClass file = new SpecialFileClass( DBConfig.Start().GetConnection().LookupValue("MaxBufferSizeOfSpecialFile").GetValue());
他のヒント
ソフトコーディングに関するWTFの毎日の記事の要点は、時期尚早な最適化と非常に明確に定義され、重複した知識のないシステムが変更され、必要なく複雑になるシステムを恐れます。
留意すべき主なことは、変更によって実際にシステムが改善され、何かをアンチパターンとして軽視することを避け、それを避けることです。システムの構成とハードコーディングの回避は、システム内の重複した知識の簡単な解決策です(ポイント11を参照: Pragmatic Programmerクイックリファレンスガイド)これは、ハードコーディングを回避するという提案の背後にある推進的なニーズです。つまりエラーメッセージのような単純なものを変更する必要がある場合は、システム内の1つの場所(コードまたは構成)のみを変更するのが理想的です。
Ola、ソフトコーディングの概念が組み込まれた実際のプロジェクトの良い例は、 Django プロジェクト。それらのsettings.pyファイルは特定のデータ設定を抽象化するため、コード内に埋め込むのではなく、そこに変更を加えることができます。必要に応じてそのファイルに値を追加し、必要に応じて使用することもできます。
http://docs.djangoproject.com/en/dev/topics/設定/
例:
これは、settings.pyファイルのスニペットである可能性があります。
num_rows = 20
次に、いずれかのファイル内でその値にアクセスできます:
from django.conf import settings
...
for x in xrange(settings.num_rows):
...
究極のソフトコーディング:
const float pi = 3.1415; // Don't want to hardcode this everywhere in case we ever need to ship to Indiana.