【发布时间】:2013-07-17 12:38:52
【问题描述】:
C# ASP .NET MVC 4.0
我了解 MVC 模式,但是当涉及到模型时:
public class User
{
int id { get; set }
int name { get; set; }
}
我可以看到将业务逻辑与存储库(数据获取器)分开的好处。比如:
public class UserRepository
{
IEnumerableList<User> GetAllUsers()
{
IEnumerableList<Product> users = //LINQ or entity;
return IEnumerableList<Product> users;
}
int GetScoreByUserId( id )
{
int score = //LINQ or entity;
return score;
}
}
业务逻辑是否会像这样进入 User 类:
public class User
{
public int id { get; set }
public int name { get; set; }
public bool HasDiscount( int id )
{
if( GetScoreByUserId( id ) > 5 )
return true;
return false;
}
}
有没有人有一个像样的例子。对我来说,找到这样一个明确的例子并不像 1 2 3 那样容易。
上面的代码看起来没问题吗? Repository 应该扩展 User 还是应该是一个单独的类.. 或者所有这些东西都应该放在 User 类本身中?
EDIT::---- 所以是这样的?
public class UserBusinessLogic
{
public bool HasDiscount( int id )
{
if( GetScoreByUserId( id ) > 5 )
return true;
}
}
EDIT::---- 澄清我现在如何理解这一点
【问题讨论】:
-
严格来说,这与“MVC”模式无关。它属于更一般的关注点/业务规则分离。但是您的
UserRepository绝对应该不继承User。 -
如果是这样,我把它分开了.. 这样分开好吗? (所以请参阅我的编辑)
-
存储库应处理数据访问。业务逻辑可以放入业务逻辑层/服务层。因此,业务层调用存储库来获取实体,执行它需要执行的操作并将所需的任何内容返回给您的控制器。
-
你能参考我上次的编辑吗?这是相当典型的布局吗?
-
@JamesT - 实际上,ASP.NET MVC 所指的“viewmodel”是presentation model 概念(不过,我更喜欢称它为 “presentation object”,因为 Fowler在所有事情上都打“模型”的倾向是F___ING混淆)。这意味着您的“视图模型气泡”应该在视图内。
标签: c# asp.net-mvc model-view-controller separation-of-concerns