模型和控制器之间的关注点分离

本文关键字:关注点 分离 之间 控制器 模型 | 更新日期: 2023-09-27 18:14:28

我仍然在试图理解整个关注点的分离,我不理解的一件事是模型和控制器在数据修改方面的区别。

假设我有一个简单的模型:

public class BankAccount
{
    private decimal amount;
    public decimal Amount
    {
        get
        {
            return amount;
        }
        private set
        {
            amount = value;
        }
    }
    public BankAccount(decimal amount)
    {
        Amount = amount;
    }
    public decimal DepositMoney(decimal amount)
    {
        Amount += amount;
        return amount;
    }
    public decimal WithdrawMoney(decimal amount)
    {
        Amount -= amount;
        return amount;
    }
}

我相信这就是模型的意义所在。但是,我在哪里调用这些方法?它在控制器内部吗?我可以修改那里的数据吗?例如,如果我想把一些钱从Jim转到Joe;我要从控制器调用这个方法joe.DepositMoney(jim.WithdrawMoney(25));吗?或者我应该创建一个在模型中转移资金的方法并调用这个方法?

模型和控制器之间的关注点分离

模型应该具有与其自身功能相关的功能。您可以有一个接收另一个帐户的功能转移。

控制器是处理用户交互的组件,与模型一起工作,并最终选择一个视图来呈现UI

你应该在控制器中使用这些方法。无论如何,我建议你保持你的项目坚固,如果你的项目增长(他们增长得很快),你将有很多逻辑在你的控制器中完成,将很难解决错误。

你可以有服务来保持逻辑在控制器之外,控制器使用这些服务。无论如何,这是一个非常简单的方法。我建议你读这样的书:http://blogs.msdn.com/b/cesardelatorre/archive/2010/03/26/our-brand-new-ddd-n-layer-net-4-0-architecture-guide-book-and-sample-app-in-codeplex.aspx

你会得到很多概念和想法,可以帮助你的未来。

那么最重要的是要有很多工具,并使用确切的谁适合你的问题。

这个链接应该可以帮助你更好地理解:

http://tomdalling.com/blog/software-design/model-view-controller-explained/

总之,模型处理与数据相关的操作,控制器处理诸如用户输入、计算(在你的例子中)、条件等操作,视图向用户呈现格式化的输出。

我希望这对你有帮助。

基本上控制器所做的就是将表示层(视图)粘合到后端层(数据模型)。

在关注点分离中,视图不应该知道模型,模型也不应该知道视图。它们之间唯一的连接是中间层,也就是控制器,所以如果你想要转账或更新钱,它必须从视图出发,触发控制器中的一个动作,后者触发模式中的一个数据库操作。

谢谢

. NET MVC是一个使用模型-视图-控制器(MVC)模式的框架。

"关注点分离"本质上意味着-

  1. 数据(业务逻辑)[模型]
  2. 可视化表示(HTML等)[View]
  3. 控制用户动作[Controller]

你可以把控制器看作是与模型和视图通信的中间层。

示例中的方法将在控制器中调用。

例如:

public ActionResult Example()
{
    BankAccount Model = new BankAcount(20);
    Model.Variable = Modify.Me;
    ...
    return View(Model);
}

因此,当Action示例被调用时,将创建BankAccount模型的一个新实例,并返回一个视图(即强类型的BankAccount)。

是的,您将从控制器内部调用该方法joe.DepositMoney(...);。请记住,HTTP是一个无状态协议,因此这些数据将被丢弃。

许多应用程序使用服务来处理数据操作(例如访问数据库)。

似乎有很多关于模型和视图模型的混淆。MVC的要点是

  1. 你有一个控制器(类),它有动作(方法)。动作响应用户输入(HTTP请求)。
  2. 控制器生成一些包含需要呈现的数据的对象——这个对象被称为视图模型。视图模型定义了必须呈现的内容,但没有定义如何呈现。
  3. 视图模型被传递给视图。视图负责"包装"视图模型,并生成一些东西来适当地呈现它——通常它生成HTML标记。

这就是ASP。NET MVC的全部内容。你有一个控制器,你创建一个视图模型,你把它传递给视图然后视图生成一些表示

然而,

模型是一个非常令人困惑的术语。它通常用于描述视图模型数据的源。最好的做法是让所有的逻辑都在控制器之外处理;为此,您应该有一个服务层。服务基本上应该为视图模型生成适当的数据,并在必要时执行适当的逻辑。所以,总的来说,它应该是这样的:

  1. 控制器对用户输入作出反应,确定究竟发生了什么,并将所有相关数据传递给适当的服务。
  2. Service包含所有的逻辑和生成的数据,可以用来响应用户的输入。
  3. 控制器使用这些服务生成的数据来创建一个视图模型
  4. 视图模型被传递给视图并适当渲染。