【问题标题】:Is angular2 mvc?angular2是mvc吗?
【发布时间】:2016-06-16 05:00:34
【问题描述】:

我曾在 Angular 1 中工作过。它显然有一个控制器充当视图和模型之间的中介。我意识到在 Angular 2 中我们没有这样的控制器。

那么我们仍然可以将 Angular 2 称为 MVC 框架吗?我知道 MVC 是一种设计模式,你可以用任何语言实现它。但是,关于 Angular 1,我听很多人说它是一个 MVC 框架,而且我看到的大多数例子都清楚地说 Angular 1 是 MVC,Controller 将 Model 与 View 分开。所以,我想知道,既然 Angular2 中有组件,我们还能称它为 MVC 吗?或者作为组件本身遵循 MVC 范式,因为我确实看到在每个组件中我们将视图和数据分开并使用绑定,也许我们仍然可以将其称为 MVC。

【问题讨论】:

  • 并不是说这有多大帮助,但我认为它被称为 MV*(或 MVWhatever)框架,因此您对如何实现最后一部分有一定的许可。
  • angular2 文档对架构有很好的概述。可以在这里找到:angular.io/docs/ts/latest/guide/architecture.html。尽管 Angular2 是基于组件的,但您仍然拥有单独的视图、单独的视图范围以及允许您连接到后端的服务。
  • 我肯定会考虑 Angular2 MVC。服务是你的模型,组件是控制器和视图的混合体。您将大部分功能逻辑和“控制器”功能放在您的类中,并通过模板将您的视图附加到它。
  • @Morgan G Services 绝对不是模型。在所有 MVC 相关框架(包括 MVVM 等)中,您有 2 个模型。第一个是领域模型。第二个是使领域模型适应视图的模型。在 MVVM 中,这是 ViewModel。很多人也开始在直接的 MVC 中使用 ViewModel 这个术语。

标签: angular


【解决方案1】:

Angular 2 更多的是基于组件的架构。你可以假设一切都是组件,比如指令、服务等等。 虽然指令和服务实际上是为了支持基础组件,但它们也以类似的方式定义。 基础组件包含依赖项、视图详细信息和可以被视为控制器的类声明。 因此,一个定义良好的组件包含一组 MVC 架构。

例如(angular 2 alpha 版本):

import {Component, View, bootstrap, provide, NgClass} from 'angular2/angular2';

@Component({
  selector : "my-home"
})

@View({
   directives : [NgClass, EditSettingPanel],
   styles: ['.hidden{ display : none} .visible{ display : block}'],
   templateUrl : "views/blog-panel.html"
})
export class home {
}

}

在上面的例子中你可以看到类“home”可以被假定为控制器,View 是用@View 装饰器编写的。组件自定义由 @component 装饰器提供。 你也可以看到不同的依赖注入实践。

编辑:: 示例(当前 angular 2/4 版本)

import { Component } from '@angular/core';

@Component({
  selector: 'custom-component',
  templateUrl: './template.html',
  styleUrls: ['./style.scss'],
})
export class CustomComponent {}

简而言之,Angular 2 是一个基于组件的 MVC 框架。

【讨论】:

  • 我认为 @View 已从 Angular 2 中删除。
  • @Phil,但组件中的模板文件充当视图
  • V 和 C 在那里。 M呢?
  • 要么创建一个组件(作为服务)用作商店,要么使用像 redux 这样的第三方商店库。
【解决方案2】:

组件和指令是控制器,Angular 处理的模板(HTML)和浏览器是视图,如果不将模型与控制器结合起来,就会得到 MVC 模式。

【讨论】:

  • 我在网络上的许多示例中看​​到的是人们使用瞬态服务(每个组件单独的实例)来定义 http 方法来访问来自服务器的数据,然后直接存储在视图组件中。在这种情况下,您根本没有模型层,因此要协调多个视图的显示,您要么必须让单独的视图直接相互通信,要么通过服务器往返每次交互。试图让我的团队相信这不是富交互 SPA 的合适方法,并且我们需要一个合适的模型层是不可能的。
  • 服务就是典范。如果您显示相同的数据,您只需与多个组件共享一个服务。通常使用 observables 来通知视图关于服务的变化是一个好主意。有些人将业务逻辑放入组件中,而另一些人则更喜欢让组件保持沉默并在服务中拥有业务逻辑。您可以拥有多个级别的服务(取决于您提供服务的地点或地点)。您可以直接在组件上提供服务(为每个组件实例获取另一个实例),或者通过在@NgModule() 中提供父组件或类似单例的服务
【解决方案3】:

Angular 2 内部遵循 MVC,因为它的组件遵循完整的 MVC 架构。

但是,如果您谈论我们在 angular2 中所做的是 MV*。它可以是 MVVM 或 MVC。它不完全是 MVC。

https://namitamalik.github.io/MVC-and-MVVM-with-AngularJS/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多