c# - 模型和 Controller 之间的关注点分离

标签 c# asp.net-mvc

我仍在尝试理解整个关注点分离,但我不明白的一件事是模型和 Controller 在数据修改方面的区别。

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

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

我相信这就是模型的意义所在。但是,我在哪里调用这些方法呢?它在 Controller 内部吗?我可以在那里修改数据吗?例如,如果我想从 Jim 那里转一些钱给 Joe;我会从 Controller 调用此方法 joe.DepositMoney(jim.WithdrawMoney(25)); 吗?或者我应该在模型中创建一个转账方法并只调用这个方法吗?

最佳答案

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

Controller 是处理用户交互的组件,使用模型,并最终选择要呈现的 View 以显示 UI

你应该在你的 Controller 中使用这个方法。无论如何,我建议您保持项目稳定,如果您的项目增长(并且增长很快),您将在 Controller 中完成大量逻辑,并且很难解决错误。

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

你会得到很多对你 future 有帮助的概念和想法。

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

关于c# - 模型和 Controller 之间的关注点分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24896921/

相关文章:

c# - WPF 应用程序在从待机状态返回时导致 Windows 崩溃

c# - 从子窗体更改父窗体属性的正确方法是什么?

c# - 将类解释为文本

asp.net-mvc - RouteValueDictonary routeValues 在 Html.BeginForm() 中有什么用

c# - 数据存储查询数组

c# - VSCode 发生异常 : CLR/System. ApplicationException

c# - 从 C++ 调用 C# 函数是否创建编译代码

asp.net-mvc - 使用 Azure 中同步的 Active Directory 验证用户(包括组)?

asp.net-mvc - Web 控制图像的任何在线资源?

c# - Entity Framework 存储过程 - 使用 CodeFirst 的多个结果集