241

パターンとアンチパターンを勉強しています。パターンについては明確な考えがありますが、アンチパターンはわかりません。Web やウィキペディアの定義は、私をかなり混乱させます。

アンチパターンとは何かを簡単な言葉で説明できる人はいますか? 目的は何ですか?彼らは何をしますか?それは悪いことですか、それとも良いことですか?

4

14 に答える 14

303

アンチパターンは、不適切なプログラミング手法と見なされるソフトウェア開発の特定のパターンです。

形式化され、一般的に優れた開発プラクティスと見なされている一般的な問題への一般的なアプローチである設計パターンとは対照的に、アンチパターンは反対であり、望ましくありません。

たとえば、オブジェクト指向プログラミングでは、ソフトウェアをオブジェクトと呼ばれる小さなピースに分割するという考え方があります。オブジェクト指向プログラミングのアンチパターンは、さまざまなオブジェクトに分けたほうがよい多くの機能を実行する神のオブジェクトです。

例えば:

class GodObject {
    function PerformInitialization() {}
    function ReadFromFile() {}
    function WriteToFile() {}
    function DisplayToScreen() {}
    function PerformCalculation() {}
    function ValidateInput() {}
    // and so on... //
}

上記の例には、すべてを行うオブジェクトがあります。オブジェクト指向プログラミングでは、さまざまなオブジェクトに対して明確に定義された責任を持って、コードの結合を減らし、最終的に保守しやすくすることが望ましいでしょう。

class FileInputOutput {
    function ReadFromFile() {}
    function WriteToFile() {}
}

class UserInputOutput {
    function DisplayToScreen() {}
    function ValidateInput() {}
}

class Logic {
    function PerformInitialization() {}
    function PerformCalculation() {}
}

要するに、一般的に使用されるパターン (設計パターン) を使用してソフトウェアを開発するための優れた方法がありますが、ソフトウェアを開発および実装する方法によっては問題が発生する可能性があるということです。悪いソフトウェア開発プラクティスと見なされるパターンは、アンチパターンです。

于 2009-06-11T11:36:48.557 に答える
45

パターンとは、あるクラスの問題を解決する方法のアイデアです。アンチパターンは、それを解決しない方法のアイデアです。そのアイデアを実装すると悪い設計になるからです。

例:「パターン」はコードの再利用のために関数を使用することであり、「アンチパターン」は同じためにコピーと貼り付けを使用することです。どちらも同じ問題を解決しますが、通常、関数を使用すると、コピー アンド ペーストよりもコードが読みやすく保守しやすくなります。

于 2009-06-11T11:35:14.253 に答える
19

アンチパターンは、問題を解決しない方法です。しかし、それだけではありません。これは、問題を解決しようとする試みで頻繁に見られる方法でもあります。

于 2009-06-11T11:38:27.117 に答える
16

本当に AntiPatterns を学びたい場合は、AntiPatterns (ISBN-13: 978-0471197133) という本を入手してください。

その中で、彼らは「アンチパターンは、明らかに否定的な結果を生み出す問題に対して一般的に発生する解決策を記述する文学的な形式である」と定義しています。

したがって、それが悪いプログラミング手法であるが一般的なものではない場合 (発生頻度が非常に限られている場合)、AntiPattern 定義の「パターン」部分を満たしていません。

于 2009-06-11T12:26:40.417 に答える
10

デザイン パターンと同様に、アンチパターンもテンプレートであり、特定の問題を解決するための反復可能な方法ですが、最適ではなく効果的ではありません。

于 2009-06-11T11:40:47.907 に答える
7

めちゃくちゃにする一般的な方法。たとえば、god/kitchensink クラス (すべてを行う) のように。

于 2009-06-11T11:37:03.687 に答える
7

興味深いことに、問題を解決する特定の方法は、パターンとアンチパターンの両方になる可能性があります。シングルトンはその最たる例です。それは文学の両方のセットに表示されます。

于 2009-06-11T12:32:00.903 に答える
6

アンチパターンは、デザイン パターンを補完するものです。アンチパターンは、特定の状況で使用すべきではないテンプレート ソリューションです。

于 2015-08-29T13:24:45.927 に答える
5

今日、ソフトウェア エンジニアリングの研究者や実践者は、「アンチパターン」と「臭い」という用語を同じ意味で使用することがよくあります。ただし、概念的には同じではありません。ウィキペディアのアンチパターンのエントリでは、アンチパターンは悪い習慣や悪い考えと少なくとも 2 つの要素で異なると述べています。アンチパターンは

「一般的に使用されるプロセス、構造、または行動パターンで、最初は問題に対する適切かつ効果的な対応のように見えますが、通常、有益な結果よりも悪い結果をもたらします。」</p>

これは、提示された問題に対する (パターンとしての) 適切な解決策であるという信念に基づいて、アンチパターンが選択されていることを明確に示しています。ただし、それは利益よりも多くの負債をもたらします。一方、臭いは、ソフトウェア システムの品質に悪影響を及ぼす単純な悪い習慣です。たとえば、Singleton はアンチパターンであり、God クラス (または不十分なモジュール化) はデザイン臭です。

于 2016-05-02T15:25:24.567 に答える
2

アンチパターンは、人々が間違った方法で、または少なくともあまり良くない方法でプログラミングする傾向がある一般的な方法です。

于 2010-02-09T08:20:54.360 に答える