我意识到这可能有点模糊,但老实说,我不知道还能在哪里问。我有一些PHP的历史,我正在尝试自学ASP.NET MVC3。
虽然我可以找到很多关于各种部分的语法和教程的源材料。我已经开始了,我已经有了相当多的进展,但我发现有点难以弄清楚如何设计整个事情,关于在哪里放东西,我不完全确定我是谁可以问我在哪里可以找到这些东西吗?
我正在努力的项目,试图自学是一种在线RPG游戏网站。我有用户注册和登录,我写了一个自定义成员资格提供程序,以适应我现有的数据库结构。但问题是我知道在哪里进行数据库查找以及如何存储数据等。例如,假设你登录,你有一定数量的黄金。在_layout页面的状态栏的右侧,它将始终显示此值。你在哪看?你怎么记得的?在控制器?哪个控制器?等等。
任何人都可以推荐一套好的高级教程或某种可以讨论的论坛吗?
谢谢!
答案 0 :(得分:3)
我从中学到了所有知识:
答案 1 :(得分:3)
查看史蒂夫·桑德森的一本好书 - 我使用前两个版本让我加快了MVC的速度。
如果您希望使用Entity Framework,我也可以推荐;
答案 2 :(得分:2)
MSDN和ASP.NET站点在MVC3上提供了很多东西。我还建议买菲尔哈克和史蒂夫桑德森的两本MVC3书。
http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3
http://msdn.microsoft.com/en-us/library/gg416514%28v=vs.98%29.aspx
这些都是很好的链接和教程。此外,您还希望为数据和身份验证和授权创建单独的数据库。这将允许解耦和更好的安全性。您应该将数据存储在数据库中,然后模型将通过DAL(数据访问层)保持对该数据库的访问,通常控制器持有DAL的实例化存储库。在这个意义上,控制器可以从模型(从而从数据库)构建对象,然后通过强类型对象将它们发送到视图,以便在用户界面中使用。
答案 3 :(得分:1)
书呆子晚餐是整个图片的一个很好的样本,您可以下载示例代码并使用它。
答案 4 :(得分:1)
我发现的问题是很多例子都没有使用MVC的最佳实践,而是支持简单和易于阅读的教程。因此,我将概述一些我发现的困难方法,并为我工作。
我个人发现,你的控制器应该负责通过ViewModels处理信息,作为业务逻辑和你的观点之间的数据传输对象(DTO),这就是他们应该拥有的全部内容。我选择永远不会在控制器中使用业务逻辑,而是选择一系列旨在处理自己的职责组的服务类(IoC负责服务可能具有的大多数问题)。 这样做是为了使业务逻辑保持干净,并且如果您决定稍后尝试制作您的网站的移动版本,或者可能将公共WebService / API公开给您的数据,那么这样做会更容易。
每个视图都应该使用专门针对每个视图的ViewModel,这些视图应该只包含基本类型或其他视图模型。永远不要直接使用ORM中的数据实体,但我会说实话我知道在仅显示信息的视图时会违反我自己的规则,但我通常会在以后付费。对您的数据模型强加的验证规则不一定适用于表单,您实体上加载的数据也可能与您的视图无关。支持Lazy Loading复杂数据实体的ORM可能会导致破坏您可以在MVC中使用的一些非常有用的第三方库,如MiniProfiler和Glimpse,更不用说在表单中呈现这些对象时的其他问题稍后发回。因此,如果可能的话,尽量坚持使用平面ViewModels。
我通常根据其用途命名我的ViewModel。所以我的注册页面可能会使用名为AccountsRegisterViewModel
的模型。但是当我回发时,我通常使用一个名为AccountsRegisterFormModel
的不同模型。这是因为很多时候我需要传递给视图中呈现的信息,但我真的不关心它(在大多数情况下它也不会出现在接受我的回发的动作上)。此外,MVC要求您通过不同的参数消除使用相同名称的操作的歧义,因此使用不同的视图模型有助于解决问题。例如CreateAccount()
显示帐户创建页面,CreateAccount()
接受表单提交。虽然您可以明确地更改每个表单的发布位置,但MVC的主要关注点是约定优于配置,所以我尽量不要更改表单发回的位置。
对于显示相关信息(黄金余额)的具体示例,您可能希望创建一个具有自己视图的子操作,该操作负责执行自己的数据访问,或者如果您想尝试自己的手在ajax中,使得余额是在smiple局部视图中处理的事情,该视图调用返回JSON的公共操作。
到目前为止,我发现这些做法对我有用。