【发布时间】:2009-12-15 13:44:31
【问题描述】:
我似乎无法理解 MVP 中的模型到底是什么。
如果我有一个分层架构 PRESENTATION / APPLICATION / DOMAIN / INFRASTRUCTURE,那么 MODEL 到底是什么?
- 通过以下方式访问的 DOMAIN 对象 低层?
- 在 映射到的 PRESENTATION 层 UI 并使用从 下层?
如果有人能澄清我对什么是模型的理解,将不胜感激。
【问题讨论】:
我似乎无法理解 MVP 中的模型到底是什么。
如果我有一个分层架构 PRESENTATION / APPLICATION / DOMAIN / INFRASTRUCTURE,那么 MODEL 到底是什么?
如果有人能澄清我对什么是模型的理解,将不胜感激。
【问题讨论】:
模型通常是一组类/类型/组件,代表您的应用程序在其中运行的核心域(业务或其他)。这些是执行所需关键逻辑的类,通常以业务规则的形式,并且还消费/操作数据。
在您的分层示例中,模型主要位于域层中,但也可能位于应用层中。
我认为您很难理解它,因为您尝试将两种独立的架构模式或查看应用程序的方式结合起来,即 n 层/n 层与 MVP。
使用某种模型/视图方法同时在应用程序中应用分层是完全合理的(并且非常普遍)。
也许您应该从一个开始,然后在您更熟悉两者时将它们叠加起来。
【讨论】:
模型是数据。这可能只是 DataSets 中数据库中的数据,也可能是一个完整的领域模型,其中包含代表您的业务领域的对象。
视图是用户界面,无论是网页、Windows 应用程序还是移动设备应用程序。
主持人是两者之间的粘合剂,也是整套服装的大脑。视图发起的动作发生在演示者中。通常在 WinForms 应用程序中,例如,我的 View 中的 Button.Click 事件只是调用 Presenter 上的一个方法,然后它会采取任何必要的操作(它可能只是在 View 中做一些事情)。
演示者持有对视图(通过界面)和模型的引用。视图有一个对演示者的引用(通常我强烈键入它,但它也可以是一个接口)。模型不知道演示者或视图。
【讨论】:
无论您遵循什么架构指南,M 始终是相同的东西。模型是特定于您的域的部分。这才是你的应用程序真正想要做的部分。该模型应该代表您的业务领域。这适用于 MVP、MVC、MVVM 等。
如果您正在创建一个库存系统,那么您的模型中很可能会出现一个 Inventory 类,一个 Product 可能会在那里,一个 Order,您就会明白了。这些是构成你的域逻辑的东西。
【讨论】:
在任何 Model-View-* 架构中,模型是描述应用程序中数据的内容(如果它们符合需要,则传递给视图进行渲染)。
如果您的应用程序已经有域对象,那么您很可能可以将它们用于您的模型。
【讨论】: