.NET Webフォームを始めたとき、VSが「App_Code」などのアプリケーションフォルダーを提供し、ほとんどのアプリの例では「BLL」、「DAL」などがそこに配置されているため、フォルダー構造を見つけるのにそれほど問題はありませんでした。
しかし、現在MVCでは、チェックするすべての例が異なる構造を使用しています。今回は標準がないため、GoogleやSOで適切なソリューションを見つけていません。
ですから、MVCプロジェクトの編成方法を共有したり、他の人が自分の心を作るのに役立つかもしれません。以下は、私が使用する中小規模のプロジェクトの構造です。
App_Data
Areas
Admin
Controllers
Models
Views
MyAccount
Controllers
Models
Views
Content
Images
Scripts
Styles
Controllers
HomeController.cs
Helpers
ExtensionMethods // I.e. based on HtmlHelper, use "helper" suffix
MenuHelper.cs // to be called as html.Menu()
Utilities.cs // Other generic (static) libraries, no suffix used
Models
ViewModels // for passing models to Views
RegisterViewModel.cs // use "ViewModel" suffix
Customer.cs // to extend models like adding Model Validation
Repositories
CustomerRepository.cs // use "Repository" suffix
Services
CustomerService.cs // use "Service" suffix, to move code away from controllers
Views
Home
Index.cshtml
Register.cshtml
Shared // Site Layouts (Master templates), also put partials here
SiteLayout.cshtml
あなたはどうですか?
Webサイトプロジェクトにコンテンツのみが含まれている(コンパイルされたコードは含まれていない)と、展開が簡単になることがわかりました。
何かのようなもの:
Web.Siteプロジェクト
Content
Images
Css
Scripts
Views
web.config
そして、すべてのコンパイル済みコードを別のプロジェクトに移動します。
Webプロジェクト
Controllers
Filters
Models
...
次に、Web.Siteプロジェクト内のすべてを展開する必要があるものとして扱うことができ、必要なすべてのアセンブリはWeb.Site\binにあります。
単純なxcopy展開を実行している場合でも、WiXを使用してMSIパッケージを構築している場合でも、これにより作業が少し簡単になります。
2つのプロジェクトのアプローチの2番目です。 Jimmy Bogardは アプローチに関する素敵な投稿 も持っています(必ずすべてのコメントを確認してください)。
私は個人的に、アプリケーションの一部で作業しているときに、関連するサービス、コントローラー、リポジトリーなどを使用します。これらのファイルをそれぞれ別のフォルダーに入れると、何度も行ったり来たりするのが面倒になります。 。いくつか遊んだ後、私はこのフォーマットに従ってきました:
AppName.Web.UI
Scripts
Content
View
AppName.UI.Core
Attributes
Filters
Formatters
Helpers
Models
Company
Interfaces
IController.cs
IRepository.cs
IService.cs
ViewModels
ViewModel1.cs
ViewModel2.cs
Controller.cs
Repository.cs
Service.cs
User
....
Plugins (mailchimp, Twitter OAuth, etc..)
Global.asax (define all the code here rather than in the UI project)
テストプロジェクト
...
私は、プロジェクトをさらに分解して、InterfaceおよびViewModelサブフォルダーを使用するかどうかに依存すると思います。それは完璧ではありませんが、私はそれが私が思う方法でよりよく一致することを発見しました。
サービスとリポジトリを3番目のプロジェクト(AppName.Core)に配置し、AppName.Web.CoreプロジェクトをWeb関連パーツ(Attributes、Controllers。ViewModelsなど)のみをカプセル化したままにすることもできます。繰り返しますが、これはプロジェクトの複雑さに関係しています。
どこにあるかがはっきりしている限り、あまり問題ではありません。組織/グループ内で一貫していることが問題だと思います。