我仍然试图理解整个关注点的分离,我不理解的一件事是模型和控制器在数据修改方面的区别。
假设我有一个简单的模型:
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));
吗?或者我应该创建一种在模型中转移资金的方法并调用这种方法吗?
答案 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)模式的框架。
“关注点分离”实质上意味着 -
您可以将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的要点是
实际上,这就是ASP.NET MVC的全部内容。你有一个控制器,你创建一个视图模型,你将它传递给视图和视图生成一些演示文稿。
然而,模型是一个非常令人困惑的术语。它通常用于描述View Model数据的来源。这里的好习惯是让所有逻辑都在控制器之外处理;要这样做,你应该有一个服务层。服务应该基本上填补为视图模型生成适当数据的作用,并在必要时执行适当的逻辑。因此,总而言之,这应该是这样的: