【问题标题】:Model-View-Controller - Which component traditionally handles file I/O?Model-View-Controller - 传统上哪个组件处理文件 I/O?
【发布时间】:2012-10-29 04:21:03
【问题描述】:

在传统的 MVC 应用程序中,哪个组件(模型、视图或控制器)负责从磁盘读取/写入模型?

【问题讨论】:

    标签: model-view-controller design-patterns file-io


    【解决方案1】:

    简答:模型层。

    大多数存储形式都是模型层的一部分(模板和类的自动加载器除外)。在完全实现的模式层中,您将拥有一组直接与低级存储(SQL、缓存、REST API、noSQL、文件系统等)抽象交互的对象。

    如果您的应用程序正在主动读取和写入文件系统(它实际上可以挂载远程 MemoryFS,您通过 SSH 隧道通过 Fuse 挂载.. 没关系),这将由处理存储的结构处理逻辑。通常是某种形式的data mapper(认为它也可能是repositoriesunits of workDAOs 和/或一些类似的结构)。

    存储抽象通常负责在domain objects 中存储数据和检索数据。在大型应用程序中,域对象和存储逻辑结构之间的这种交互包含在 services 中,以隔离应用程序和域业务逻辑,以免在表示层中泄漏。

    【讨论】:

      【解决方案2】:

      MVC 通常是一个表示层框架,它在基于表示的应用程序中处于顶层。在实际的企业应用程序中,您可能在它之下有好几层。

      这通常在另一层中完成:您可以将其命名为 Business LayerService Layer

      【讨论】:

        【解决方案3】:

        与其他人发布的一样,您的 MVC 应用下方通常会有一个域/业务层/数据层。如果您正在寻找一些如何使用 Entity Framework 实现此类堆栈的好示例,请查看 NerdDinner 和 MVC Music Store 示例。

        http://www.nerddinner.com/

        http://mvcmusicstore.codeplex.com/

        【讨论】:

          【解决方案4】:

          围绕“层”和架构模式存在一些复杂性和大量混淆。如果您正在寻找最简单的答案,并且为了简单起见,您已决定代码的每一部分都位于(模型、视图或控制器)中的一个且仅一个中,那么我给您的答案是选择用于数据库访问的模型。现实情况是,所有架构模式都是不完美的,您将不得不根据经验来看看感觉如何。

          【讨论】:

            【解决方案5】:

            MVC 只是更大架构的一部分

            诸如持久性之类的基础设施问题通常由 MVC 三元组之外的一些类/对象处理。

            【讨论】:

            • 您能详细说明一下吗?使用 MVC 模式并保存/加载模型(即某种简单的文档、图像等,处理器应用程序)的示例性架构是什么样的?相对于 MVC 逻辑,保存文件的逻辑在哪里?
            • @weberc2 - 没有“示范”架构。每个应用程序都有不同的架构需求。但是拥有一种将模型实体序列化/反序列化到磁盘的方法就是这样一种选择。
            • 那么模型序列化逻辑和文件I/O逻辑之间没有典型的关系吗?如果存在典型关系,什么样的实体可以处理文件 I/O,它与模型的关系是什么?
            【解决方案6】:

            mvc 中不必有任何磁盘 io。如果存在,它可能属于模型中或模型附近,如果那是持久的。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-06-26
              • 2018-05-20
              • 2020-11-17
              • 1970-01-01
              • 2017-02-11
              • 2012-04-19
              • 2014-01-10
              • 2013-09-16
              相关资源
              最近更新 更多