将内容访问逻辑放在 BaseController 中是个好主意吗?
-
22-09-2019 - |
题
我正在开发一个 ASP.NET MVC 应用程序,其中任何页面的内容都可以从数据库(如果存在)中提取并显示在页面上。
这是为了使非技术人员可以编辑内容而无需进入源代码(例如观点)并改变事情。
我这样做的方式是,每个控制器都派生自一个基本控制器。基本控制器重载“OnActionExecuted”,并利用此机会提取分配给当前操作/控制器的任何内容。
如果该操作返回派生自“ContentViewModel”的 ViewModel,它将使用数据库中的文本填充 ViewModel 的“Text”属性。
然后文本由视图渲染。
你能看出这个设计有什么弱点吗?
如果我使用 HtmlHelper 扩展来提取内容(我从视图中调用),而不是使用基本控制器,会更好吗?
我问这个问题的原因之一是,拥有自己的基本控制器似乎会干扰调用“Html.RenderAction”,它似乎期望指定的控制器直接继承自“System.Web.Mvc.Controller”。
解决方案
ActionFilters 不应该用来拉取内容。
控制器不应用于提取内容,而应仅通过应用简单的逻辑来分派传入请求。
HTML 助手不应用于提取任何内容。它们旨在渲染预填充了所提供数据的 UI 元素。
可以从数据库中提取任何页面内容的应用程序
这基本上就是大多数应用程序的运行方式。
这是为了使非技术人员可以编辑内容而无需进入源代码(例如观点)并改变事情。
对于非技术人员编辑内容来说,应该有一个合适的 UI。独立于项目底层技术,非技术人员永远不应该编辑代码。
我建议你不要做出任何奇怪的事情,但要保持清晰。实现您的业务层,该层将向视图将呈现的模型提供数据。创建一个 UI 供其他人编辑内容。
不隶属于 StackOverflow