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