Model view controller MVC-从另一个模型中引用一个模型
我在我的应用程序中遇到了以下情况:Model view controller MVC-从另一个模型中引用一个模型,model-view-controller,design-patterns,Model View Controller,Design Patterns,我在我的应用程序中遇到了以下情况: 控制器1 .GetItems() 模型1 .GetItems() 控制器2 .GetCurrentUser() 模型2 .当前用户 在这个场景中,Controller1.GetItems()调用Model1.GetItems()方法。Model1.GetItems()方法需要知道(例如)当前用户的角色是什么来构建正确的项目列表,并且应该从Model2.CurrentUser属性(存储当前用户的缓存信息)中获取它 从另一个模型访问一个模型是一
- 控制器1
- .GetItems()
- 模型1
- .GetItems()
- 控制器2
- .GetCurrentUser()
- 模型2
- .当前用户
关于我认为模型之间不应该有引用,正确的方法是使用控制器进行此链接。因此,在您的情况下,您可以在GetItems方法中将CurrentUser作为参数传递。如果您的第二个模型经常被第一个模型引用,您可以将您的模型类编译到一个单独的库中?您将遇到一些关于最佳方法的争论,但最终,您有两个选择。您可以让模型从另一个模型中提取所需的信息,也可以让控制器传递所需的信息 根据我所读到的,只要模型没有任何控制器逻辑或视图逻辑,您就很好,因此让模型了解其他模型没有什么错。然而,其他人认为,让控制器传递所需的信息会使代码更容易记录,因为您可以看到模型需要来自其他地方的信息。但最终,我认为两者都是有效的,你选择使用哪一种可能取决于个人偏好
设计-控制器提供数据
Controller {
function doWork() {
User user = ModelOne.GetCurrentUser();
Items[] items = ModelTwo.GetItems(user);
}
}
ModelTwo {
Items[] GetItems() {
User user = ModelOne.GetCurrentUser();
...
}
}
Controller {
function doWork() {
Items[] items = ModelTwo.GetItems();
}
}
模型一
- 用户GetCurrentUser()
- Items[]GetItems(用户)
Controller {
function doWork() {
User user = ModelOne.GetCurrentUser();
Items[] items = ModelTwo.GetItems(user);
}
}
ModelTwo {
Items[] GetItems() {
User user = ModelOne.GetCurrentUser();
...
}
}
Controller {
function doWork() {
Items[] items = ModelTwo.GetItems();
}
}
设计-模型获取数据
Controller {
function doWork() {
User user = ModelOne.GetCurrentUser();
Items[] items = ModelTwo.GetItems(user);
}
}
ModelTwo {
Items[] GetItems() {
User user = ModelOne.GetCurrentUser();
...
}
}
Controller {
function doWork() {
Items[] items = ModelTwo.GetItems();
}
}
模型一
- 用户GetCurrentUser()
- Items[]GetItems()
Controller {
function doWork() {
User user = ModelOne.GetCurrentUser();
Items[] items = ModelTwo.GetItems(user);
}
}
ModelTwo {
Items[] GetItems() {
User user = ModelOne.GetCurrentUser();
...
}
}
Controller {
function doWork() {
Items[] items = ModelTwo.GetItems();
}
}
所以,你说我应该在Controller1中引用两个模型,然后在Controller1.GetItems()中引用:1)调用Model2.GetCurrentUser()并获取用户;2) 调用Model1.GetItems(user)并将其传递给用户。是吗?是的,如果这两个模型将在同一流程中使用,我认为在一个控制器中使用是有意义的。或者,如果需要将控制器耦合到模型作为抽象模式的一部分,则可以使用第三个控制器,该控制器对两个控制器都有引用,并执行相同的操作。模型类已编译到单独的程序集中。这有什么问题?我不明白,谢谢。因此,我更喜欢该模型从另一个模型获取数据。原因是:在stackoverflow上发布问题简化了场景。在真实场景中,模型可能还需要其他模型(例如,拥有当前用户忠诚度信息的另一个模型)提供的其他可扩展信息。因此,我更喜欢将逻辑集中在Model1.GetItems()中,该逻辑将使用生成正确项目列表所需的所有模型。