2009-04-16 20 views
4

あるレイヤーに別のレイヤーのオブジェクトと同じ名前のオブジェクトがある場合は、接頭辞を付けてオブジェクト名を変更するか、新しい名前空間を持ち、完全修飾名で参照するのが最善でしょうか?命名規則とネームスペース

適切な名前空間であなたのクラスを定義します:

namespace Project1.Data 
{ 
    public class Person {...} 
} 
namespace Project1.Model 
{ 
    public class Person {...} 
} 

し、使用を例:私は名前空間と名前空間のエイリアス、例えば使用したい

namespace Project1.Data 
Object Person; 

namespace Project1.Model 
Object Person; 

Data.Person.Name=Person.Name; 

OR 

dbPerson.Name= Person.Name; 

答えて

12

完全な名前を使用するか、名前空間の別名を定義します(特に完全な名前空間が長い場合はusefule)。

using data = Project1.Data; 
using model = Project1.Model; 

data.Person p1 = new data.Person(); 
model.Person p2 = new model.Person(); 
//... 
p1.Name = p2.Name; 
+4

あなたの答えに追加するだけで、ただ一つの別名は使用しないでください。両方にエイリアスを使用し、エイリアスを使用してそれらを常に参照してください。混乱の原因となるため、そのうちの1つをデフォルトにしないでください。 – DevinB

2

オーバーロードされた名前を参照する頻度によって異なります。

1つのファイルで複数回使用する場合は、最初の方法を使用します。

これを1回または2回だけ使用する場合は、完全修飾名を書き出します。これにより、他の人があなたのファイルの上端を狙って参照しているオブジェクトを特定する必要がなくなります。

1

実際には、それぞれの周波数を要求しているかどうかによって異なります。一般的に、私は最も頻繁に参照している型の短縮版を使用し、使用頻度の低い型には長い名前を使用します。結局のところ、同じファイルに両方の用途がたくさんある場合、名前空間のエイリアシングを使用する必要がありますが、私にとっては、コードが膨大になってから難しくなる最後の手段です何が起こっているかに従ってください。

1

自分自身も同じ考えを持っていました。私はクラスの名前を変更することは悪い考えだと思う。たとえば、私はデータアクセス層とビジネス層を持っています。どちらもユーザーを扱います。だから私は持っている...

Project1.Business.User Project1.DataAccess.User

クラスのための本発明の新しい名前を考えるしようとするのは時間の無駄であると、おそらくほとんどないとクラスのための奇妙な名前を意味します意味。クラスの命名は既に頭痛の種である可能性があります。

私はMcWafflestixに同意します。「私は最も頻繁に言及しているタイプに短縮バージョンを使用し、使用頻度の低いタイプには長い名前を使用します。

1

簡単です。 .NET Frameworkのガイドラインを一度聞くだけで実際に役立ちます(本書の多くの資料はRedmond WonderlandのJavaスタイルの要素です)。

プロジェクト間またはプロジェクト内で同様の型名を使用しないでください/ライブラリは名前空間を混合する。ドメインやモデルを一般的に混在させることができます(C++言語でも厳密で強力ですが、コンパイラ、解像度、列挙型コンパイラのクラッシュや問題にもなります)。

したがって、完全に修飾されていても、偽りのない(btwエイリアスと「使用」は非常に制限されており、せいぜい軽度の複製が行われ、一般的なプログラミングではC#の弱点などが証明されます)。私の経験で

、データドメインの種類は、より適切な名前のための主なターゲットであるため、ある名前のリファクタリングのために:

a)は豊富なのASTの処理と安い(しかし、のような単純なADT-SのサポートC#では、IDEで右クリックし、タイプチャレンジされた動的Rubyファン/バッカーに応じて強力に感じる)

[4.0としても読むことができるダイナミックな機能のヒツジは誰もが責任を負うが、名前空間や機能JS、Cテンプレートを用いて(クラス付きC言語ではない)、またはそれに類似する]

b)は、セマンティクスをよりよく伝達します。

c)通常、原始的であるが型付きの本質またはメッセージ(OOではない型、すなわち前述の本のようにOO型の批評はそれ自体がまっすぐイントロから壊れる)。リフトすべての土地を参照する「モデル」)

d)および「エイリアス」は、実際に可能であり、非常に2020のようなクロスドメインの使用に有用なアーチファクト(..すなわちなる。値型プログラミング)

実際にはルールはありませんが、開発中にネームスペースを混在させていることに注意してください。プラス少し余りにも深刻ではない、よりコンパイル時間とIntelliNonsenseのエラー..もちろん

あなたの設計/命名の問題です。ツールベンダーでさえ、時代遅れのブラウズ情報に基づく拡張された一般的なIDEのもう一度、管理された言語では他の人がそれをうまくやっています。

名前を複製することに反対しているわけではありませんが、デュアル+ interop +表現などを混在させるとケースが(厳しいが必要です)同じ名前で読みやすくなります。すなわち、重複は二重使用の必要性です。しかし、それはC#が親切ではない、または奨励していない低レベルのイディオムです(オーバーヘッドに有利です)。