【问题标题】:functions in MVC model class? [closed]MVC模型类中的函数? [关闭]
【发布时间】:2014-10-16 04:39:36
【问题描述】:

我想知道 MVC 模型类中是否有函数?我想在 View 中使用这些方法来接受参数并执行一些业务逻辑。

这是标准还是坏主意?或者这种方法有什么问题吗?

【问题讨论】:

  • 在这个网站上,您可以了解什么是 MVC 以及它是如何工作的。 asp.net/mvc
  • 为什么人们不赞成这个问题?也许问题是我们的问题,应该在programmers.stackexchange.com。但这个问题是一个有效的问题,OP 要求开发人员在他们的一生中经历过一些事情!
  • 我对类似问题的回答:stackoverflow.com/a/14132184/453277。简而言之,我喜欢保持模型和控制器非常简单,并将(可能可重用的)逻辑放入其他类中。

标签: c# .net asp.net-mvc asp.net-mvc-4


【解决方案1】:

在我看来,不,它不是标准的,除非你认为模型不仅仅是简单的类......

试试这个:

保持模型分开:

-服务于您的业务层和数据访问层的模型。我们就叫他们Models吧。

-为您的 MVC 视图提供服务的模型。让我们叫他们ViewModels

然后尝试将您的控制器视为交警。让他们接受请求并指派某人完成实际工作。

这意味着最好在您的应用程序中创建 2 个单独的部分。

-业务层。 - 数据访问层。

如果应用很小,您可以将上述 2 层设为一层。

所以毕竟你将拥有:

-Controllers 使用 ViewModels 与 Views 对话。 -控制器使用模型与业务/数据访问层对话。

所以保持你的 modelsviewmodels 瘦,不要在控制器中而是在单独的层中执行业务逻辑(它可能是另一个项目或只是项目中的另一个类)。

其他信息:

你的模型可以是这样的:

public class Course
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
}

public class Faculty
{
    public int FacultyId { get; set; }
    public string FacultyName { get; set; }
    public List<Course> AllotedCourses { get; set; }
}

public class Student
{
    public int EnrollmentNo { get; set; }
    public string StudentName { get; set; }
    public List<Course> EnrolledCourses { get; set; }
}

您的视图模型:

public class ViewModelDemoVM
{        
    public List <Course> allCourses { get; set; }
    public List <Student> allStudents { get; set; }
    public List <Faculty> allFaculties { get; set; }
}

然后创建一个单独的类来处理模型并返回视图模型以供控制器传递给视图,反之亦然。

【讨论】:

  • 就这样,ViewModels 由 Models 组成,Models 有一些 AutoMapIgnored / NotMapped 字段。所以方法需要是模型而不是视图模型的一部分。现在如何将函数/方法放入模型中?
  • 我只是说不要把它们放在模型类中。创建一个单独的类。然后在您的控制器中,创建该类的新对象并使用该类方法...该类应该访问模型实例
  • +1,但有 4 件事。 ... A)关于它应该如何的更完整的例子,会更好(比如何不应该)。我的意思是,一个带有模型、模型视图、控制器、视图的非常小的示例将是最好的。 ... B)看起来,你的意思是说模型只是 setter/getter 方法,这意味着你可以赋值并取出值。 ... C)。不确定是否允许构造函数一次设置所有这些值。 ... D)理论/解释总是更好
【解决方案2】:

我通常将所有业务逻辑放在模型类中,并尝试使控制器尽可能愚蠢。

就个人而言,我认为您不应该考虑任何业务逻辑,除非没有其他办法。

也许你可以向我们展示你的代码,这样更容易讨论。

【讨论】:

  • 谢谢,通过说“我将所有业务逻辑都放在模型类中”,您是说在模型类中保留函数很好吗?您还使用什么其他方式将业务逻辑放入 Model 类中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多