我正在从网络表单转移到MVC,我有点迷失。我的问题几乎由MVC Vs n-tier architecture回答,但不完全。
在网络表单中,我通常会根据我的解决方案构建包含3个项目的网站; UI,BLL和DAL,也许还有一个用于测试(我相信这是常见做法)。
现在我正在启动MVC3,看来我不需要根据Visual Studio为我提供的内容来区分3。
MVC是设计用于运行多个项目还是仅从一个项目运行? Web表单似乎适合N-Tier应用程序,虽然我可能通过删除我的Models文件夹并将其移动到我的DAL并删除我的Controller文件夹并将其移动到我的BLL来制作我的MVC N-Tier看起来好像我是打击MVC要我做什么(或者可能只是Visual Studio如何设置它)?或者可以按原样保留模型和控制器,但是在Model文件夹中创建一个'viewmodel',Controller会在大多数逻辑中与BLL对话?任何指针都会很棒。
答案 0 :(得分:3)
MVC只是一种表示模式,因此它只说明了如何构建表示逻辑。它没有说明数据访问模式以及如何构建业务领域。
我倾向于在Web项目(MVC),模型(域)项目中构建我的Web应用程序,并且可能根据应用程序构建数据访问和/或服务项目。我总是在Web项目中删除我的Models-folder,因为我不想要那些。我的所有域模型和视图模型都存在于模型项目中。
关于控制器,控制器应该只是用户想要做的翻译器(请求),因此模型和视图可以相应地响应(响应)。即控制器应该很薄,你几乎没有注意到它。控制器应包含用于选择模型和要显示的视图的逻辑。所有其他逻辑都属于模型。
此外,视图应该只包含非常简单的表示逻辑,如ifs和foreaches,但条件应该在视图模型中准备。
答案 1 :(得分:1)
MVC模型仅适用于UI。您可以继续使用与之前相同的关注点分离。
在我们的项目中,我们将网站图层和视图模型保留在Web项目中。我们使用WCF服务进行数据访问(这与您的DAL相对应)。缩小差距是一个逻辑项目(这将对应于您的业务逻辑),其中包含客户端对服务的访问以及需要从服务结果发生到视图模型的任何转换。
我们的控制器和视图模型都很薄。逻辑在逻辑层和域模型中是分开的。我们通常会在服务契约(在您的情况下,DAL)和视图模型之间共享域模型,但视图模型永远不会直接暴露域模型。
我希望这会有所帮助。