我的应用程序中有这个场景:
控制器1
型号1
控制器2
模型2
在这种情况下,Controller1.GetItems()调用Model1.GetItems()方法。 Model1.GetItems()方法需要知道(例如)当前用户构建正确的项列表的角色是什么,它应该从Model2.CurrentUser属性(存储有关当前用户的缓存信息)中获取它)。
从另一个模型访问模型是一个好习惯吗?
谢谢, 此致
答案 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方法。