2016-08-10 6 views
0

ASP.NET Web API、すべてのビジネスオブジェクトに使用されるコントローラを持つことをお勧めしますか?例えばすべてのリソースに対して1つのコントローラを持つことは悪い習慣ですか?

、私は私のコントローラで次のルートを持っています。これに基づき

[Route("{resource}/{id}")] 
[HttpGet] 
public HttpResponseMessage Get(string resource, int id) 
{ 
    // code not shown for brevity... 
} 

、私は約50のビジネスオブジェクトがあり、それぞれが基本的に名前である、「リソース」という名前のプロパティを持っていますクラスの文字列(例: "Customer"、 "Order")。上の私のコントローラのアクションでは、私は、ルートパラメータ "リソース"と "ID"を使用してリソースを取得します。たとえば:

GET /顧客/ 1234 と GET /発注/ 5678

は、この悪い習慣ですか?ビジネスオブジェクトごとにコントローラを作成する方が良いでしょうか?各アプローチの長所と短所は何ですか?

答えて

0

私はAppleのやり方が好きです。

すべてのビューは1つのビューコントローラによって制御されます。 〜View Controllerプログラミングガイドfor iOS 考え方は、Viewsを簡単に入れ替えることができるということです。 IMOでは、ビューごとに1つのコントローラしか持たないため、これを簡単に行うことができます。

一般的な経験則として、必要なコントローラの数は、Webアプリケーションのモジュールとサブモジュールの数に依存します。

補足として、コントローラーをエリアに編成すると便利です。エリアの概念はASP.NET MVCフレームワークに組み込まれており、1つのモジュールに対応するコントローラの構成を簡素化します。

関連の議論の数があります。

MVC Architecture

MVCController And View directories organization

What does MVC class organization look like for multiple views and controllers?

ASP.NET MVC controller actions design

+0

私の質問は、ビューに関するものではありません...下記の私の答えを参照してください。 – TheArchitect

0

私の本当の問題は、私はこれを行うべきかどうかだった:

public class EverythingController : ApiController 
{ 
    [Route("{resource}/{id}")] 
    [HttpGet] 
    public HttpResponseMessage Get(string resource, int id) 
    { 
     // decide which type to get using the 'resource' parameter... 
    } 

} 

またはこの:

public class ProductsController : ApiController 
{ 
    [Route("{id}")] 
    [HttpGet] 
    public HttpResponseMessage Get(int id) 
    { 
     // get product by id here... 
    } 

} 

public class CustomersController : ApiController 
{ 
    [Route("{id}")] 
    [HttpGet] 
    public HttpResponseMessage Get(int id) 
    { 
     // get customer by id here... 
    } 

} 
関連する問題