2011-12-21 2 views
9

最近私たちのコードベースでは、私たちのモデルクラスのほとんどがUserのような名前を持ち、余分なものを持つ継承型がありますUserExというフィールドがあります。私はC#の非同期CTPでTaskEx(タスクの技術的な制限のために、既存のライブラリを変更することができないため)という追加の静的メソッドをTaskExに追加しました。職場の誰かに話を聞くと、ネットワーク転送を最適化するためのクラスが存在することが分かりました。必要に応じて最小限のものを引き出すことができます。私の質問は、それでは - エックスが意味するのは何ですか?私が考えることができるのは、おそらく "余分なもの"だけです。.Netのタイプの名前に-Exを追加する

+0

「エクステンション」でもあり、このフォーラムで少し検索してください:http://stackoverflow.com/questions/3963374/what-does-it-mean-when-ex-is-added-to-a -function-method-name(これはWindows API用ですが、私は人々が以来命名規則を使用していると仮定しています) –

+0

私はExtendedと一緒に行くつもりです、Micorosoft comもこの記法を使用しました:) –

+0

おそらく命名規則の一部ですたとえば、仕事では、clsSomeClasee.csが意味するように、私たちが書くクラスの前に接頭辞を付けることが望まれます。 – MethodMan

答えて

17

他のすべての答えを得た:Ex接尾辞は "拡張"の略です。下位互換性を維持しながら新しい機能を導入する一般的な方法である、古いものを廃止または削除することなく、新しいクラスまたはメソッドを導入する方法です。

hereの説明のとおり、Windows APIはこれをすべて実行します。

ハンスは、このアプローチの問題点について、彼の説明でを指摘しています。。 「拡張」機能を拡張したいのですが?それをFunctionExExと呼びますか?それは馬鹿に見える。

実際には、Microsoftの独自の.NET用のコーディングガイドライン(主観的ですが、それはありますが)specifically recommend against appending Ex to a typeです。行うにはdowhileforしようとは少し時期尚早であるとして

MyType 
MyType2 // modified version 
MyType3 // oh wait, we had to modify it again! 

が悪い計画でこれを非難:あなたがこれを行う必要がある場合は代わりに、あなたは番号を使用する必要があります。実際のアプリケーションやフレームワークを書くときには、しばしばが必要です。それは、が機能する、すばやく汚れたバージョンのバージョンを手に入れたことを意味します。。後で、これは貧しいデザインであり、何かを変える必要があると判断します。あなたの手を投げ、完全に書き直す(巨大な遅延を作り、すべての古いコードを廃止する)のではなく、別の名前の新しいタイプを導入します。知覚は常に20/20です。

+0

すばらしい投稿です。 Btw、20/20は正常なビジョンです、後天性はおそらく通常のビジョンよりもはるかに多くを提供します - https://answers.yahoo.com/question/index?qid=20080215115045AATahKe –

2

私が知る限り、「拡張」または「拡張」を表します。あなたが変更できないものにfunctionnalityを追加する必要があるときには、一般的な接尾辞です。良い例は、Cが関数の多重定義をサポートしていないために追加された、Win32 APIのさまざまな-Ex関数です。

+0

+1、私のコメントによると;) –

5

Exの新しいクラスまたはメソッドの終了は、命名規則であり、命名規則と同様、それを実装する人々の気まぐれに左右されます。

には厳格なルールはありません、それは何も多かれ少なかれ正しいクラス(またはExtra、またはMore、またはDidntWantToMessWithThePublicApi)の最後に2を追加するよりもです。

なぜ使用されているのかについては、古いコードを改ざんすることなく、既存のAPIにリビジョンを提供するためにマイクロソフトで長い歴史があります。このin classesin methods、およびin structuresの例があります。さまざまな例を見つけることもできます。which instead use 2

+1

.NETチームは、Win32チームが経験した問題のために、これも部分的にはこれをやりません。 2倍または3倍の何かを「伸ばす」ことを望む場合は、単純に縮尺を変えません。 –

+1

ああ私は同意します、* "それはそれを実装する人々の気まぐれに服従します" *。私は適合性アドバイスを提供するつもりはなかった。 – user7116

0

私はおそらく考えた:

  • 外部
  • が正直なところ
  • ( 'のうち' または 'を越えて' のように)単に 'EX'
+0

あなたのリストを完成させる:古いものの代わりに - "私は' classNameEx'の日付を使用していましたが、今は 'className'を使っています:P –

0

を遊離する、私はそれが意味を考えます「私たちはこの機能を十分に計画しておらず、変更された要件については考えていませんでした。今は締め切りに近いところでこれを処理しなければなりません。もちろんこれは必ずしも当てはまるわけではありませんが、Exと一緒にクラスが見つかるたびに、それが導入された理由とフレームワークに正しく追加されなかった理由を理解しようとします。私の場合、ほとんどの場合// HACK: これはフレームワーク内にあれば、私たちのコードにしか当てはまりません。 それは意味することができた、私の推測は常に "拡張"

1

この方法は業界標準ではありません。私はそれを自分で行うことを認めますが、これは古いwin32カーネルの機能のいくつかのほとんどが痕跡のエミュレーションです。たとえば、最初に「beginthread」C関数があり、後で改良された別の「begintreadEx」が作成されました。

私は、あなたが新しい機能のために古い機能の使用を止めるために[Deprecated]属性を使用して他のコーダー(またはあなた自身)に知らせることをお勧めします。それはより本質的な意味を持っています。

かいつまん - あなたは彼らが何であるかに基づいて、クラス&機能に名前を付けたり、を行うには、このような混乱を作成する疑似意味の接頭辞/接尾辞を回避しようとしてください。それが業界標準のアプローチです。

+0

2つの機能が*と* do * [基本的に]同じこと?最後に何かを追加することは、1つが最初のものの拡張版または修正版であることを示す、かなり自己文書化する方法です。接尾辞は文脈上無意味ではありません。あなたは 'BeginThreadEx'と名づけますか? –

+0

C#のほとんどの場合、既存のメソッド名を保持して、(パラメータを変えて)新しいオーバーロードを作成することができます。 – Polyfun

+0

少なくとも、他のwin32カーネル関数との一貫性があったので、BeginThreadExと似ています。私は、厳しいルールではなく、私がガイドラインとして言ったことを意味しました。私は、常に機能をよく名づけるためのレシピはないと考えています。あなたの特定の機能について特に考えることの代わりにはありません。また、一貫していることが(業界標準ではなくても)価値があることを認識してください。 – AlanR

関連する問題