4

Is it common to name an assembly one name, name a folder inside of the assembly another and then start to carry those names into the classes inside of those folders? For example:

Project.Presenter
    Carriers
        CarriersFindPreferedCarriersPresenter.cs
        CarriersPreferencesPresenter.cs
        PreferredTargetLocationPresenter.cs

Project.Service.Fixture
    Carriers
        CarriersServiceFixture.cs

Or to carry this futher, even methods such as this:

List<PreferredTargetLocationPresenter.PreferredTargetLocation> 
newlyAddedPreferredLocations = new
List<PreferredTargetLocationPresenter.PreferredTargetLocation>();

newlyAddedPreferredLocations.add(destinationLocation.PreferredCity);        

To me this seems to grow more and more confusing as you work on a project longer and start to add additional assemblies and methods. Is there a better way to work with this?

Any feedback would be welcomed.

4

4 に答える 4

4

100人の異なる人々にこの質問をすると、100の異なる答えが得られます。私は、コードの記述/保守を最も簡単にする方法が好きです。半分の時間は長い説明的な名前で、残りの半分は短くて甘い名前です。コードが直感的で柔軟である限り、どちらの方法でも問題は発生しません。

于 2010-02-09T20:51:10.203 に答える
4

Pragmatic Programmersは、DRYの原則を普​​及させました。これはネーミングにも当てはまります。同じスコープ名またはプレフィックスを何度も繰り返しても、それ以上の情報は追加されません。名前が長くなり、読みにくくなり、入力ミスが容易になり、検索が困難になります。で始まるクラス名が100個ある場合PreferredLocation*、正しい名前を見つけるのに苦労します:-(

だから私はこれに完全に反対しています。クラスとメソッドの名前は、囲んでいるパス/プロジェクト名によってスコープされます(Javapackageでは、C#では適切な用語はわかりません)。したがって、クラス/メソッドの所在に関するすべての情報が必要な場合は、その完全修飾名を見るのに十分です。ただし、通常のコードでは、どこでも完全修飾名を使用するように強制されるべきではありません。唯一の例外は名前の衝突ですが、それは規則ではなく例外として扱われるべきだと私は信じています。

さらに、適切に設計されたアプリでは、ほとんどのメソッド/クラスはグローバルに表示されず、それぞれのパッケージ内でのみ表示されます(プログラミング言語で許可されている場合、Javaでも可能ですが、C#でも可能です)。これにより、名前の衝突のリスクが軽減され、クラス名のプレフィックスがさらに不要になります。

于 2010-02-09T21:00:18.240 に答える
3

長い名前を使用しなければならない場合もありますが、通常は名前をできるだけ短くしたいと考えています。重要なのは、説明的な名前を付けることです。これにより、十分な詳細が得られます。

于 2010-02-09T20:52:48.720 に答える
2

PreferredTargetLocationPresenter.PreferredTargetLocationタイプのサブタイプですかPreferredTargetLocationPresenter?つまり、クラスをネストしていますか?

もしそうなら、あなたはPreferredTargetLocationそれ自身のクラスに突入したほうがよいかもしれません。これにより、次のように書くことができます。

List<PreferredTargetLocation>

それ以外の

List<PreferredTargetLocationPresenter.PreferredTargetLocation>

C#3.0で作業している場合は、次を使用して宣言をさらに短縮できますvar

var locations = new List<PreferredTargetLocation>();
于 2010-02-09T20:53:39.233 に答える