关于ASP.Net MVC的新手问题:我有一个项目,我管理两个“模型” - 让我们说“产品”和“客户”。每个Model都有自己的Controller和一组Views来实现基本的CRUD操作。
现在我想从不同的视图(比如说主页)列出所有产品和所有客户端。
我是否应该在产品和客户控制器中创建新方法以列出其项目并从主页的索引视图中调用这些方法? Home Controller是否应该调用产品和客户端方法?
我该如何正确解决这个问题?
Thansk提前!
佩德罗
答案 0 :(得分:1)
这个问题的答案在某种程度上既是主观的,也是基于意见的。那就是说..
HomeController
可以调用Product
和Client
相关方法来返回真正有效成为HomeIndexViewModel
的内容ProductViewModel
ClientViewModel
}}和Model.ProductViewModel
属性 - 您的视图将通过Model.ClientViewModel
,Index
等访问数据。
我会更进一步,添加一个业务流程组件,该组件将负责处理HomeController
public class HomeController : Controller
{
private readonly IOrchestrator orchestrator;
public HomeController() : this(IOrchestrator orchestrator)
{
}
public HomeController(IOrchestrator orchestrator)
{
this.orchestrator = orchestrator;
}
public async Task<ActionResult> Index()
{
var homeIndexViewModel = await orchestrator.GetHomeProductsAndClientsAsync();
return View(homeIndexViewModel);
}
}
操作所需的请求和应用程序逻辑。这应该使您的控制器保持较薄并与后端分离。
GetHomeProductsAndClientsAsync()
FooOrchestrator
显然是您的HomeIndexViewModel
类的一种方法,它将处理应用程序逻辑以返回HomeController
。
将协调器作为接口传递给IOrchestrator
(FooOrchestrator
,而不是实现IOrchestrator
接口的let repeat ls n =
let rec f l = function
| 0 -> l
| n -> f (List.rev_append ls l) (n-1) in
List.rev (f [] n)
类,以便于依赖注入(尽管,恕我直言,没有DI,这种方法仍然有益。)
一些阅读:
"Never Mind the Controller, Here is the Orchestrator"(Dino Esposito)