【问题标题】:Avoid creating models in Angular避免在 Angular 中创建模型
【发布时间】:2017-05-18 14:08:38
【问题描述】:

我即将开始一个新项目,我想使用单页应用程序技术。由于我将使用 ASP.NET,我认为最简单的方法是使用 Angular,这是我的新手。
无论如何,Angular(或任何其他 JS/TS 技术)最让我害怕的是,因为我没有太多时间,我负担不起将所有模型/实体重写为另一种语言的费用。这个代码和维护成本对我来说太高了。

tl;dr

所以我的问题是,有没有办法让 Angular 使用原始模型/实体名称,这样我就可以在页面中使用它们而无需重写任何不必要的代码?
.NET 属性会起作用吗?

【问题讨论】:

  • 不确定我是否理解正确,但也许这里的一些东西会有所帮助(TypeLite)? (假设您为 Angular2 开发人员使用 TypeScript)stackoverflow.com/questions/12957820/…
  • 考虑使用 Swagger 生成 Swagger 模式文件 (swagger.json),您可以使用 Swagger CodeGen 或 AutoREST 创建包含模型的 REST 客户端

标签: asp.net angular asp.net-mvc-5 asp.net-core


【解决方案1】:

我猜您担心的是,您的业务对象世界(实体模型)需要作为模型(javascript 对象)反映在您的客户端/角度应用程序中?对它们的需求还来自您在 angular 2 中遇到的输入错误。

创建和维护一个跨越服务器和客户端部分的透明模型世界对于现实世界的应用程序来说是太多的努力,尽管它会很好。

我决定使用和接收模型作为通过 AJAX/WebAPI 远程调用的结果,并在我的客户端应用程序中使用这些“模型”。然后,结果会反映您可能已经定义的业务模型(实体)。

this.dataService.getRecords('MT_MyEntity')
        .subscribe((data: any[]) => {
            var response: any = data;                 // Do this to avoid typing errors
            var resprecords: any = response.items;
            // Here you get entities; 
            // Deal with your business objects fetched from remote system; Use it to show in forms, ....
        },
        error => {
            // your error handling
        });

在您的应用程序中,您可以使用您在服务器端模型中定义的实体和属性名称(注意大小写修改)

对我来说,这是一种务实的处理方式,而且效果很好。

【讨论】:

  • 您已经很好地定义了我的问题。事实上,我希望有一种方法可以仅使用 C# 和 XAML 创建 Web 应用程序。我鄙视JS。但是您的解决方案听起来很公平。
【解决方案2】:

对于任何大小合适的应用程序,创建客户端模型的好处远远超过创建和维护它们所需的工作量。

这种效果在 TypeScript 中更为明显,因为它允许对合约进行编译时检查。随着我们将越来越多的代码移至客户端并使用 Angular 等框架,拥有明确定义的模型有助于我们了解正在发生的事情。当类型检查在服务器上可用时,我们获得了相同的好处。

拥有一个单独的客户端模型还允许我们调整此类模型以适应客户端 UI 需求(尽管有时我们会创建 viewmodel 以满足此类需求)

@Ivan 强调的生成这些客户端合同的方法可以帮助我们减少整体工作量。

【讨论】:

  • 我实际上对生成它们并不感兴趣,而是能够从服务器接收到的 json 等动态访问。
猜你喜欢
  • 2011-11-25
  • 2016-07-30
  • 1970-01-01
  • 2015-09-23
  • 2019-06-12
  • 2019-12-07
  • 2019-03-23
  • 1970-01-01
  • 2019-10-31
相关资源
最近更新 更多