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

时间:2014-07-22 20:09:29

标签: c# asp.net-mvc

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

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

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;
    }
}

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

5 个答案:

答案 0 :(得分:0)

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

控制器是处理用户交互的组件,使用模型,最终选择要呈现的视图显示UI

您应该在控制器中使用此方法。无论如何,我建议你保持你的项目SOLID,如果你的项目增长(并且它们快速增长)你将在你的控制器中完成很多逻辑,并且很难解决错误。

您可以使用服务来保持控制器和控制器外部的逻辑使用此服务。无论如何,这是一种非常简单的方法。我建议您阅读以下书籍: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

您将获得许多可以帮助您未来的概念和想法。

然后最重要的是拥有大量工具并使用确切适合您问题的人。

答案 1 :(得分:0)

此链接可以帮助您更好地理解:

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

在摘要中,模型处理与数据相关的操作,Controller处理诸如用户输入,计算(在您的情况下),条件等操作,并且View向用户显示格式化输出。

我希望这会有所帮助。

答案 2 :(得分:0)

控制器基本上将表示层(视图)粘贴到后端层(数据模型)。​​

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

由于

答案 3 :(得分:0)

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

“关注点分离”实质上意味着 -

  1. 数据(业务逻辑)[模型]
  2. 视觉表示(HTML等)[查看]
  3. 控制用户操作[控制器]
  4. 您可以将Controller视为与模型和视图进行通信的中间层。

    您的示例中的方法将在Controller中调用。

    例如:

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

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

    是的,您可以在Controller中调用该方法joe.DepositMoney(...);。请记住,HTTP是无状态协议,因此将丢弃此数据。

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

答案 4 :(得分:0)

模型和视图模型似乎存在很多混淆。 MVC的要点是

  1. 您有一个具有操作(方法)的控制器(类)。操作响应用户输入(HTTP请求,一个)。
  2. 控制器生成一些包含需要渲染的数据的对象 - 此对象称为视图模型。视图模型定义必须呈现的内容,但 应该呈现
  3. 视图模型传递给视图。 View负责"包装"视图模型并生成适当的东西 - 通常它会生成HTML标记。
  4. 实际上,这就是ASP.NET MVC的全部内容。你有一个控制器,你创建一个视图模型,你将它传递给视图和视图生成一些演示文稿。

    然而,模型是一个非常令人困惑的术语。它通常用于描述View Model数据的来源。这里的好习惯是让所有逻辑都在控制器之外处理;要这样做,你应该有一个服务层。服务应该基本上填补为视图模型生成适当数据的作用,并在必要时执行适当的逻辑。因此,总而言之,这应该是这样的:

    1. 控制器对用户输入作出反应,确定究竟发生了什么,并将所有相关数据传递给适当的服务。
    2. 服务包含所有逻辑并生成可用于响应用户输入的数据。
    3. Controller使用此服务生成的数据创建 View Model
    4. 视图模型将传递到视图并正确呈现。