【发布时间】:2012-10-29 04:21:03
【问题描述】:
在传统的 MVC 应用程序中,哪个组件(模型、视图或控制器)负责从磁盘读取/写入模型?
【问题讨论】:
标签: model-view-controller design-patterns file-io
在传统的 MVC 应用程序中,哪个组件(模型、视图或控制器)负责从磁盘读取/写入模型?
【问题讨论】:
标签: model-view-controller design-patterns file-io
简答:模型层。
大多数存储形式都是模型层的一部分(模板和类的自动加载器除外)。在完全实现的模式层中,您将拥有一组直接与低级存储(SQL、缓存、REST API、noSQL、文件系统等)抽象交互的对象。
如果您的应用程序正在主动读取和写入文件系统(它实际上可以挂载远程 MemoryFS,您通过 SSH 隧道通过 Fuse 挂载.. 没关系),这将由处理存储的结构处理逻辑。通常是某种形式的data mapper(认为它也可能是repositories、units of work、DAOs 和/或一些类似的结构)。
存储抽象通常负责在domain objects 中存储数据和检索数据。在大型应用程序中,域对象和存储逻辑结构之间的这种交互包含在 services 中,以隔离应用程序和域业务逻辑,以免在表示层中泄漏。
【讨论】:
MVC 通常是一个表示层框架,它在基于表示的应用程序中处于顶层。在实际的企业应用程序中,您可能在它之下有好几层。
这通常在另一层中完成:您可以将其命名为 Business Layer 或 Service Layer。
【讨论】:
与其他人发布的一样,您的 MVC 应用下方通常会有一个域/业务层/数据层。如果您正在寻找一些如何使用 Entity Framework 实现此类堆栈的好示例,请查看 NerdDinner 和 MVC Music Store 示例。
【讨论】:
围绕“层”和架构模式存在一些复杂性和大量混淆。如果您正在寻找最简单的答案,并且为了简单起见,您已决定代码的每一部分都位于(模型、视图或控制器)中的一个且仅一个中,那么我给您的答案是选择用于数据库访问的模型。现实情况是,所有架构模式都是不完美的,您将不得不根据经验来看看感觉如何。
【讨论】:
MVC 只是更大架构的一部分。
诸如持久性之类的基础设施问题通常由 MVC 三元组之外的一些类/对象处理。
【讨论】:
mvc 中不必有任何磁盘 io。如果存在,它可能属于模型中或模型附近,如果那是持久的。
【讨论】: