web-dev-qa-db-ja.com

ASP.NETコントロールの命名ガイドラインは何ですか?

現在、開発チームで使用したい設計ガイドラインを作成中であり、ASP.NETコントロールの名前の付け方について今日話し合いました。私は私たちの親友のラベル、テキストボックス、ボタンなどについて話している。

私たちが投票した次の3つの可能性を思いつきました:(例はFirstNameを入力/表示するためのTextBoxです)

  1. コントロールタイプを接尾辞としてコントロールIDに追加します:[FirstName_TextBox]または[FirstName_tbx]
  2. コントロールタイプをプレフィックスとしてコントロールIDに追加します[tbxFirstName]
  3. オプション2 [lblTextBox]のように、コントロールのIDをFirstNameに設定し、関連するフィールド(テキストボックスのラベルやバリデーターなど)に名前を付けます。

最終的にオプション2を使用することにしました。オプション1ほど冗長ではなく、コントロールの名前の前にどのコントロールであるかを指定するのが好きです。

私の質問は、マイクロソフトがこれらのプレフィックスに関するガイドラインをリリースしたかどうか、または私たちの決定についてコメントがあるかどうかです。

19

Visual Studioが「TextBox1」をページに追加するときに追加する理由は、Microsoftがそれをどのように使用するかを知る方法がないためです。 「Control1」という名前を付けると、コントロールがいくつあっても混乱する可能性があります。

Microsoftは、一般にOO命名規則についてのガイダンスを提供していますが、UIコントロールの命名については特にそうではありません。UIコントロールは最終的にコードで使用される変数であるため、他の変数と同じ規則に従う必要があります。表記接頭辞。

主な理由は...

  • コントロールのタイプはテキストボックスからリストボックスに変わる可能性があり、関連するすべてのコードを修正する必要があります(前述)
  • コードは、コントロールの内容に関心があり、コントロールの種類には関心がない必要があります。コントロールのタイプに関心がある場合、特定の機能に依存し始め、カプセル化を破ります。コードをあまり変更せずに、コントロールを簡単に交換できるはずです。 (基本OOP原則)
  • 標準コントロールのプレフィックスを思い付くのはかなり簡単ですが、新しいコントロールが毎日開発されています。独自のWebUserControlを作成することも、サードパーティのコントロールのセットを購入することもできます。 カスタムコントロールに使用するプレフィックスをどのように決定しますか?コントロールのタイプに焦点を合わせるのではなく、コードに含まれる情報を考慮する必要があります初期化。

  • txtFirstName => firstNameまたはFirstName
  • txtState =>状態または状態
  • cboState =>状態または状態(lstStateまたはrdoStateについては、コントロールタイプを変更する主な例-コードはコントロールのタイプではなく、ユーザーが選択した状態に関係するため、これらはすべて同じ名前にする必要があります)
  • ctlBilling => BillingAddressまたはBillingAddress(カスタムコントロール-ハンガリアン記法では、コントロールが何であるかはあまり明確ではありませんが、意味のある名前で、それに含まれる情報を理解し始めます。つまり、billingAddress.Street、billingAddress.FullAddressなど)
29
Gregor Dzierzon

マイクロソフトの公式標準についてはよくわかりませんが、これは私が開発キャリアを通じて行ってきたことです。

私は通常、コントロールが行うことの名前の前にあるコントロールタイプを省略します。略語は小文字で、コントロールの名前はCamelCaseのままにします。

例えば。ユーザー名のtexboxはtbUserNameになります

これが私が使用する標準的な略語のリストです:

Abbr     -  Control

btn  -  Button
cb   -  CheckBox
cbl  -  CheckBoxList
dd   -  DropDownList
gv   -  GridView
hl   -  Hyperlink
img  -  Image
ib   -  ImageButton
lbl  -  Label
lbtn -  LinkButton
lb   -  ListBox
lit  -  Literal
pnl  -  Panel
ph   -  PlaceHolder
rb   -  RadioButton
rbl  -  RadioButtonList
txt  -  Textbox
22
WebDude

ほとんどの場合、そのデータをキャプチャするために現在使用されているコントロールタイプではなく、コントロールがどのような種類の情報であるかを気にするので、コントロールタイプよりも情報のタイプを優先します。 IDEでソートされたリスト:

  • AgeRangeDropDownList
  • AgreedToTermsCheckBox
  • FirstNameTextBox
  • LastNameTextBox

VS:

  • chkAgreedToTerms
  • ddlAgeRange
  • txtFirstName
  • txtLastName
5
Mark Cidade

Microsoftはここでsomeガイダンスを提供します。

コントロールをWebフォームにドラッグすると、「TextBox1」のようなものが自動的に表示されます。これはIDEで、特定のニーズに合わせて「1」の部分を変更する必要があることを示しています。

その場合、「TextBoxFirstName」が道のりのようです。

2
Shawn Miller

オプション1を好む2つの理由:

  1. FirstNameTextBoxは、私のビジネスオブジェクトにより厳密に一致します。
  2. IntelliSenseでより使いやすくなります。

Csgeroがコントロールタイプの変更について指摘した理由から、FirstNameCtrlへの変更を検討していると述べました。では、asp/winフォームのプロパティとの競合の可能性を減らす/取り除くために、なぜ接尾辞や接頭辞を気にする必要があるのでしょうか。

1
Tim Murphy

ASP.NETに関するガイドラインはわかりませんが、Microsoftの 『Framework Design Guidelines』という本には、クラスメンバーの命名に関するいくつかのベストプラクティスガイドラインがあります。ほとんどの場合、ASP.NETコントロールは適切なタイプの保護されたフィールドになるため、これらの命名ガイドラインはASP.NETコントロールにも適用されると思います。実際、コード分析は、コントロール参照フィールドと他のフィールドを区別しません。

これらのガイドラインでは、タイプを説明するバリアントではなく、論理的な使用を意味する命名スキームを使用することを推奨しています。これにはいくつかの理由があります。プレフィックスは、後の変更のために正しくない可能性がある開発者へのタイプを意味します。これにより、コードの保守に追加の手順が追加されます。 ButtonコントロールをLinkBut​​tonコントロールに変更する場合は、プレフィックスを修正するために名前も変更する必要があります。

そのため、コントロールをFirstNameEditなどと呼びます。

1
Kimoz

オプション1を使用する方が良いと思います。なぜなら、その意味と使用法によってフィールドを簡単に見つけて、将来のプログラミングコーディングを理解できるからです。また、IntelliSenseを使用すると、プログラミングコードのどこでこのフィールドを使用するかを見つけることができます。したがって、意味のあるフィールドの名前で適切なコントロールを見つけることができます。このフィールドに使用するコントロールの種類は覚えていませんが、「City」コントロールを検索するコントロールの例のタイプではなく、意味のあるフィールド名を使用してこのフィールドを見つけることができます。「City」と入力するだけです。Intellisenceこのコントロールのすべての情報が表示されますが、使用するコントロールの種類を覚えていない場合は、何を開始すればよいかわかりません。

1
PattyD
Abbreviation    ||   ASP.NET Control

標準制御:

btnボタン

cbチェックボックス

cbl CheckBoxList

ddl DropDownList

fu FileUpload

hdn HiddenField

lnkハイパーリンク

img画像

ibtn(btn)ImageButton

lblラベル

lbtn(btn)LinkBut​​ton

lbリストボックス

点灯リテラル

mv MultiView

pnlパネル

ph PlaceHolder

rb RadioButton

rbl RadioButtonList

tblテーブル

txt TextBox

v表示

データ管理

dtl DataList

dp DataPager

dtv DetailsView

ets EntityDataSource

fv FormView

gv GridView

lds LinqDataSource

lv-ListView

ods ObjectDataSource

qe QueryExtender

rptリピーター

smd SiteMapDataSource

sds SqlDataSource

xds XmlDataSource

検証管理

cpv CompareValidator

ctv CustomValidator

rv RangeValidator

rev RegularExpressionValidator

rfv RequiredFieldValidator

vsValidationSummary

検証管理:

cpv // CompareValidator

ctv CustomValidator

rv RangeValidator

rev RegularExpressionValidator

rfv RequiredFieldValidator

1
Sherif Hamdy

私もこの問題に苦しんでいます。以前は「ハンガリー風の接頭辞」を使用していました。

今、私は別のアプローチを取り、コントロールをクラスのプライベートフィールドとして見ようとしています。プライベートフィールドのタイプを前置していないのに、なぜTextBoxに後置する必要があるのでしょうか。

それで、以前は何でしたか:

var newCustomer = new Customer();
newCustomer.Name = txtName.Value;
newCustomer.Address = txtAddress.Value;
newCustomer.City = txtCity.Value;
newCustomer.HasEnoughMoney = cbHasMoney.Selected;

になる:

var newCustomer = new Customer();
newCustomer.Name = name.Value;
newCustomer.Address = address.Value;
newCustomer.City = city.Value;
newCustomer.HasEnoughMoney = hasMoney.Selected;

正直なところ、「名前」コントロールがテキストボックスであるかどうかは気にせず、その値が欲しいだけです。

また、コントロールまたは別のフィールド/変数について話しているかどうかが十分に明確でない場合は、そのフィールド/変数の名前またはクラスの関数を再検討する必要があると思います(つまり、少し大きいかもしれません)。 。

0
Davy Landman

私は接頭辞としてコントロールタイプを使用し、後でコントロールの名前を使用する傾向がありますが、私は常にキャメルケースなので、さまざまなタイプのコントロールの例では..

  • TxbFirstName
  • DdFirstName
  • ChbFirstName

インテリジェントな理由から、私は常にコントロールの名前を完全に修飾しているので、次のことは何もしません...

  • TxbFName
  • TxbClientNo
  • TxbNoOfCpn

しかし、最終的には個人的な好みになります

0
Nick Allen

ハンガリアン記法を使用する唯一の理由は、IDEにインテリセンスがなく、iCounterが整数である理由を理解するのが容易ではなかったためです。

ただし、briefを使用して開発する時間はもう過ぎており、IDEは1秒で情報を表示します

次に、VB.NETコードを継承しますが、大文字と小文字は区別されません。どうしますか?

lblFirstName、txtFirstName 1つはラベルで、もう1つはテキストボックスです。

では、大文字と小文字を区別せずにこれらにどのように名前を付け、実際にそれらが何であるかを知るにはどうすればよいでしょうか。

uxFirstNameとuxFirstNameが機能しない

私が見つけた唯一の答えは、ハンガリアン記法を使用することです、はい、私は口の中に投げました。次に、vb.netを使用します。netは大文字と小文字を区別する必要があります。これは、すべてがILにコンパイルされるためです。

0
Joe developer

2番も使用しますが、それが良いアプローチであるとは完全には確信していません。これは「悪い」種類からのハンガリアン記法です。つまり、接頭辞は目的(意味論)ではなく、型(構文)を示します。これに伴う問題は、TextBoxとして開始したものが後でDropDownになり、次にRadioButtonGroupになる可能性があり、そのたびにコントロールの名前を変更する必要があることです。

0
csgero

コード保守の観点からそれを見ると、2年前にコードを実行した後に見るのに最適な表記法は何でしょうか。フォームにフィールドが多すぎないように努めていますが、これが時々発生することは誰もが知っています。コントロールタイプの前にハンガリー語のタイプ表記を使用した場合、変数名でわかりにくい場合に、その値がどこから来ているのかを把握するよりも簡単だと思います。いずれかのタイプのリファクタリングツールを使用している場合、コントロールの名前を変更すると、コードが自動的に変更されるため、コントロールの変更に関する議論が減ります。

0
osp70

ここに正しい答えや間違った答えがあるとは思いません。あなたが何を決めようとも、最も重要な側面は、実際にコーディングに関して一貫性を保つことだけだと思います。

0
Brendan Kowitz

私はuxCityを使用しているので、それが間違いなくユーザーインターフェイスコントロールであり、他のオブジェクトではないことがわかりますが、TextBoxからDropDownListに移動する場合は変更する必要はありません。

ただし、DropdownList and Textboxがある場合は、dlCityとtxtCityを使用するか、コンボcboCityを使用する必要があります。

ハンガリアン記法は、8文字の名前に制限されていて、インテリセンスやデバッグの強調表示がない場合は厳密ではありませんでした。それは規律であり、コーディングスタイルが正しければ、コードは正しい可能性が高いことがわかりました。変数にも使用されているため、コードを読んで、DIYタイプの強制であるため理解できます。

ただし、CityTextbox、CityTextboxLabel CityUx、CityUxLblを使用します

それはすべて、誰がプロジェクトの基準を設定しているかによって異なります。

0
Dave

ほとんどの人がハンガリー語スタイルのプレフィックスを使用します(オプション2)。 「Firstname」は実際にはテキストボックス自体ではなくtexbox.Text値であるため、セマンティック命名はあまり役に立ちません。

0
martin