2016-10-21 16 views
0

C#でMVCパターンを使用する場合のベストプラクティスは何ですか?フォルダや新しい名前空間を使用するはずですか?名前空間を使用するときは、参照を追加する必要があります。名前空間は他の人と話すことができます。MVC - フォルダ対ネームスペース構造体(C#)

しかし、名前空間を使用してプログラムをリリースして.exeファイルをチェックすると、実行できるように同じフォルダにある3つの(Model、View、Controller).exeファイルが作成されます。

フォルダーを使用する場合、3つのexeファイルをすべて移動するのではなく、「メイン」.exeをフォルダーに移動することができます。

私は、参照を使用してお互いに話すことができるクラスを設定できるので、名前空間の分割が優れていると思います。しかし、私はそれを実行するために同じフォルダに3つのexeファイルを持たなければならないのが嫌いです(名前空間スタイル)。

だから、この+賛否両論のベストプラクティスは何ですか?

2015のVisual Studioでの違いを見るためにscreengrabsを参照してください: Different namespaces Folder structure

感謝を!

+0

ベストプラクティスでは、常に名前空間とフォルダ構造が一致するようにしてください。あなたの質問はどちらが良いかを尋ねているようですが、その答えは両方が必要です。 – bikeman868

+0

明示するには:Model、View、Controllerを名前空間のフォルダとして作成するか、Model、View、Controllerを3つの異なる名前空間にする必要がありますか? 私の印刷画面を見てください。 – Freddessson

+0

プログラムの構成は完全に意見に基づいています - C#/ .Netは、名前空間/フォルダ/アセンブリを整理する(Javaと異なります)。プロジェクトに最適な方法で自由に設定してください。 –

答えて

0

回答は - それに依存します。それは、あなたにとって理解しやすいものや、他の人と働いている場合には、このコードを扱うすべてのプログラマーにとって理解しやすいものに依存します。

C#では、フォルダ構造と名前空間をすべて組み合わせることができます。たとえば、CarというクラスをSuperModels\ExtraModels\Models\Car.csに含めることができ、このクラスはnamespace MyProject.Controllersにある可能性があります。それは超奇妙で、おそらくあなたのコードを変更したいと思う人は皆、あなたの心の中であなたのことについて厄介なことを言っているでしょう(あるいは大声でも!)。

私はASP.NETでMVCパターンを使用しています。デフォルトのプロジェクト構造は2番目のスクリーンショットに似ていますので、私は(おそらく少なくとも1回はASP.NETを使用したことがある人なら誰も)しかし、私はモデルのためだけに別のクラスライブラリプロジェクトがあるプロジェクトを見て、コントローラとビューを持つ2番目のプロジェクトで参照されました。あなたが大丈夫であるすべてのアプローチは、良いアプローチです - 正しいプロジェクト構造のようなものはありません。

0

名前空間(およびアセンブリ)は、コンパイラがクラスを探す経路です。

ファイルとフォルダは、ボックスです。は、クラスを検索します。

すべてをきちんと整理して見つけやすいので、通常はフォルダ/ファイルパスと名前空間パスウェイのマッチングが最も簡単です。

ただし、

場合によっては、それらを分離する方が簡単です。たとえば、自動生成されたEFエンティティのカスタマイズされた部分クラス用のMetaDataクラスの作成 -

  • 「DAL」フォルダ内EDMX、「モデル」フォルダ内の
  • カスタマイズされた部分クラス、

部分クラスが同じ名前空間の下になり「Models.MetaData」フォルダ内

  • とメタデータのクラス'MyProject.Models'ですが、異なるフォルダにあるので、自動生成されたクラスをそのままにして、簡単にカスタマイズすることができます。

    完全修飾クラス名を使用して、MetaDataクラスにリンクすることができます。

    これはDALフォルダにあります。

    namespace MyProject.Models 
    { 
        public partial class Entity1 
        { 
         //Auto-generated code here - 
         //Don't touch so you don't lose it if auto-updates occur 
    
         public string foo { get; set; } 
        }  
    } 
    

    これはモデルフォルダにあります。

    namespace MyProject.Models 
    { 
        [MetadataType(typeof(MyProject.Models.MetaData.Entity1Metadata))] 
        public partial class Entity1 
        { 
        }  
    } 
    

    これはModels.MetaDataフォルダにありますが、

    namespace MyProject.Models.MetaData 
    { 
        public class Entity1Metadata 
        { 
        [DisplayName("Foo Display Text")] 
        public string foo { get; set; } 
        } 
    } 
    

    私は、これは1「モデル」フォルダに一緒にすべてを持つよりも、より良い、よりきちんと整頓だと思います。

  • 関連する問題