asp.net-mvc - ASP.NET MVC Controller 设计

标签 asp.net-mvc asp.net-mvc-3 model-view-controller

我对如何正确设计我的 Controller 有疑问。
项目相当简单:博客、包含类别和图像的图片库、新闻部分。

但是我不知道如何为此组织我的 Controller ,因为我想做一些管理面板,管理员可以在其中编辑、添加和修改这些东西。到目前为止,我已经想出了 3 个场景……

  1. 管理面板将有指向 site/controller/edit 的链接,但这些操作结果的布局将不同于标准布局。

  2. 管理 Controller 将执行所有这些操作,例如 BlogAdd、BlogEdit,因此 url 将类似于 /site/admin/blogedit

  3. 在 admin 文件夹中创建博客 Controller 的副本,这样 url 就会像 /site/admin/blog/edit - 我感觉到路由有问题,因为 2 个同名的 Controller 听起来不像一个好主意,但我喜欢 ho URL 在这种情况下看起来。

我想做的是有点类似于 wordpress 的 CMS,其中博客的创建、编辑和删除与默认博客本身完全分开。

最佳答案

我建议您停止考虑 URL 和 Controller 是 1->1 的关系。这将使事情变得容易得多,也不会那么困惑。您可以使用 MVC 的路由机制使 URL 随心所欲地工作,并且没有理由因为您想要的 URL 而限制您的 Controller 设计/组织,因为您始终可以根据您想要的 URL 调整路由。

在构建网站时,只关注 Controller (和通用界面)并忽略 URL,直到你到达那个点,然后当你想出一个好的 URL 方案时,进入路由系统并添加路由根据需要连接到现有的 Controller 操作。

编写博客引擎代码后,您将对用户工作流有更好的了解,并且可能会找到不同的方式来组织您的 URL,然后您可以在不接触 Controller 本身的情况下重新组织您的 URL。

关于您的第一个要求:

根据您的最终目标,有两种方法可以做到这一点。如果您的目标是显示相同的核心内容,但有不同的用户选项(不同的总体布局、页面上的其他按钮等),那么最好的办法就是传入一个 IsAdministrator View 模型中的属性,并根据是真还是假对页面进行轻微更改。原因是因为您仍然(很可能)希望页面的核心是相同的,这可以防止您复制与核心数据(为管理员和非管理员显示的数据)相关的代码。

编辑:总而言之,根据使开发更容易的因素来组织您的 Controller ,而不是根据用户与系统的交互方式。您可以随时更改后者,更改前者更难,并且会使维护变得烦人。

关于asp.net-mvc - ASP.NET MVC Controller 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6943634/

相关文章:

c# - 发布时未填充 MVC 模型类

asp.net-mvc-3 - 数据注释属性。如何设置执行顺序?

java - 在 spring mvc 应用程序中使用 bean 作用域的最佳实践

javascript - 将 JSON 数据从 View 传递到 Controller 为 null

c# - 无法使用类型为“System.Data.Entity.Core.Objects.ObjectQuery”的实例进行调用

c# - DbContext Unity 不调用 HttpContextLifetimeManager.RemoveValue() 坏事?

ios - 传递 NSManagedObject

php - MVC架构中,密码加密应该在哪里进行

c# - 模型和 Controller 之间的关注点分离

javascript - 在同一页面上渲染部分 View