2013-07-17 53 views
1

好的...我需要列出所有上传,下载和请求。但我也需要列出所有上传,下载和特定于用户的请求。我不确定在何处放置这些操作以使其合理。这些操作将其数据作为json返回。将操作组织到控制器中

  • 当用户调用UploadsController中的POST: Index(file)时,会添加上传。
  • 当用户在UploadsController中调用GET: Files(fileName)时,会添加下载。
  • 当用户调用标有LogAttribute的任何ActionResult时,会添加一个请求。

什么我的控制器看起来像:

UsersController

  • GET:列出
  • GET:创建
  • POST:创建(视图模型)
  • POST:删除(用户ID)
  • GET:登录
  • POST:签到(用户名,PWD)
  • POST:SignOut

UploadsController

  • GET:指数
  • POST:指数(文件)
  • GET:文件(文件名)

方法1:

创建2个新的控制器,DownloadsControllerRequestsController。在这两个控制器和UploadsController创建以下操作:

  • GET:ListAll
  • GET:ListFor(用户ID)

方法2:

创建一个新的控制器,StatsController它具有以下操作:

  • GET:ListAllUploads
  • GET:ListUploadsFor(用户ID)
  • GET:ListAllDownloads
  • GET:ListUploadsFor(用户ID)
  • GET:ListAllRequests
  • GET:ListRequestsFor(用户ID)

正如前面提到的,我我不确定这两种方法中的哪一种(如果有的话)是有意义的。有人可以解释一下,这将是“最好的”?

回答

0

控制器应该组功能相关的Action方法 - 至少,这是我的。你会有几千行的课程中有不相关的方法,都做了独特的事情吗?如果不是这样,不要以为控制器有什么不同;毕竟它是一个有方法的类。我可能会选择两种方法 - 对我来说都很好看。这取决于你喜欢什么。我甚至可能会更细化,并具有UploadsController以及DownloadsController和RequestsController。这些控制器名称将有助于将您的视图分离到独特的文件夹中,这对其他开发人员来说更加人性化。

+1

我同意这里,控制器通常应该以逻辑方式处理相同的对象。我唯一需要的是让userId可选参数'RequestController.GetAll(int?userId)'和'UploadsController.GetAll(int?userId)',因为这些方法在相同的基础对象之后,只是使用不同的查询...又名相同的网址不同querystring – stuisme

+1

@stuisme,不完全。例如,将所有_Requests_映射到ViewModel时,我必须为_UserID_获取_Username_。 - 但是为_User_获取_Requests_,我已经知道_User_的_Username_,因此不必为了获得_Username_而进行额外的数据库调用。 - 简而言之:映射逻辑不同,无论是_Requests_还是只针对特定的_User_ ..以及_Uploads_/_Downloads_的工作原理。 – ebb