我已经使用 ASP.NET MVC 和 Polymer 构建了 3 个应用程序,但我总是遇到相同的架构问题。
目前,如果我想将 MVC View 与 Polymer webcomponents 分开,我最终会得到这样的结构:
- wwwroot
- bower_components (polymer)
- elements (my components)
- View (my views)
- Controllers (my controllers)
然后,如果我必须解决一个特定的 View ,例如: http://mydomain/home/index我最终会得到类似的东西:
- Controller > Home
- Action > Index
- View > Index.cshtml
- Element > paper-page-index.html
来 self 的 Index.cshtml
<!-- import the element -->
<link rel="import" href=".../paper-page-index.html" />
<!-- render the element and pass properties -->
<paper-page-index first-name="@Model.FirstName"></paper-page-index>
问题是我必须将我的 ViewModel 的每个属性传递给自定义元素,这变得非常冗长,有时甚至很无聊。 正确的方法应该是什么?每个 .cshtml View 都应该被视为一个 web 组件并停止创建 web 组件本身并将它们包含到我的 .cshtml 页面中?或者我应该像 Martin Fowler 所说的那样有两个 GET 方法:
- 一个 GET 来检索我的 View (Controller/Action/.cshtml 页面)
- 一个 GET 从 MVC 检索 ViewModel
此外,我的表示逻辑应该仅到我的 Polymer 元素中还是到我的 C# ViewModel 中?
有什么线索吗?
最佳答案
最后,我决定以这种方式构建项目:
后端
- asp.net 核心
- Controller 公开 REST 方法
- 使用 asp.net 身份保护
前端
- “前端 api”的 asp.net 核心
- Polymer 的标准“静态页面”
- Polymer View 的标准“元素”结构
“按原样”提供 View ,然后它向“前端”api 询问相应的表示模型。然后,它查询 HTTP REST 端点,以防它需要来自数据存储/lucene 的数据。
这代表了 M. Fowler 的“两步 View ”架构模式,在此处进行了解释:https://martinfowler.com/eaaCatalog/twoStepView.html
优势
- 我仍然可以使用 ASP.NET Identity 和 OAuth 保护整个前端静态内容
- 我可以利用 Polymer 构建,因为 Polymer 和 Razor 之间没有严格的关系
- 我可以将 UI、表示逻辑和业务逻辑完全分为 3 个不同的区域
关于asp.net - 使用 Polymer 构建 ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42347797/