MVC - 从另一个模型引用模型

时间:2010-11-22 15:27:21

标签: model-view-controller design-patterns

我的应用程序中有这个场景:

  • 控制器1

    • .GetItems()
  • 型号1

    • .GetItems()
  • 控制器2

    • .GetCurrentUser()
  • 模型2

    • .CurrentUser

在这种情况下,Controller1.GetItems()调用Model1.GetItems()方法。 Model1.GetItems()方法需要知道(例如)当前用户构建正确的项列表的角色是什么,它应该从Model2.CurrentUser属性(存储有关当前用户的缓存信息)中获取它)。

从另一个模型访问模型是一个好习惯吗?

谢谢, 此致

3 个答案:

答案 0 :(得分:3)

如果您的第二个模型经常被您的第一个模型引用,您可以将模型类编译成一个单独的库吗?

答案 1 :(得分:3)

你会遇到一些关于最佳方法的争论,但在一天结束时,你有两个选择。您可以让模型从其他模型中获取所需的信息,也可以让控制器传递所需的信息。

根据我所读到的内容,只要模型没有任何控制器逻辑或视图逻辑就可以了,所以让模型了解其他模型没有任何问题。但是,其他人认为让控制器传递所需的信息会使代码更容易记录,因为您可以看到该模型需要来自其他地方的信息。但是,在一天结束时,我认为两者都有效,而您选择使用哪一种可能会归结为个人偏好。


设计 - 控制器提供数据

  

ModelOne

     
      
  • 用户GetCurrentUser()
  •   
     

ModelTwo

     
      
  • 项目[] GetItems(用户)
  •   

Snippet - Controller Proivdes Data

Controller {
  function doWork() {
    User user = ModelOne.GetCurrentUser();
    Items[] items = ModelTwo.GetItems(user);
  }
}

设计 - 模型获取数据

  

ModelOne

     
      
  • 用户GetCurrentUser()
  •   
     

ModelTwo

     
      
  • Items [] GetItems()
  •   

代码段 - 模型获取数据

ModelTwo {
  Items[] GetItems() {
    User user = ModelOne.GetCurrentUser();

    ...

  }
}

Controller {
  function doWork() {
    Items[] items = ModelTwo.GetItems();
  }
}

答案 2 :(得分:1)

我认为你不应该在模型之间有参考,正确的方法是使用控制器来获得这个链接。因此,在您的情况下,您可以将CurrentUser作为参数传递给GetItems方法。