代码之家  ›  专栏  ›  技术社区  ›  johnstok

序列化的类设计-想法还是模式?

  •  2
  • johnstok  · 技术社区  · 16 年前

    让我从一个示例开始(假设实现是在一种静态类型的语言中,如Java或C#)。

    假设您正在构建内容管理系统(CMS)或类似的东西。数据按层次组织为 Folder s、 每个文件夹都有一个子文件夹集合;一个孩子可能是一个孩子 Page . 所有项目都存储在根文件夹中。不允许循环。我们有一个非循环图。

    系统将具有远程API和的实例 List ,根节点的序列化将发送整个图形。这显然是不可接受的。

    我很感兴趣地听到人们过去已经解决了这个问题。

    我有两个可能的建议:

    1. 查询导航
    2. 停止并重新连接
    5 回复  |  直到 12 年前
        1
  •  1
  •   Nix    12 年前

    Folder 对象将包含指向其子对象的URL列表。

        2
  •  0
  •   ablaeul    15 年前

    溶液用于 NFS

    如果您特别关注通过网络发送对象,那么 CORBA DCOM 新的呢 WCF . 但等一下,还有更多类似的 RMI . 此外,还有 Web Services . 我现在就到此为止。

        3
  •  0
  •   Nix    12 年前

    假设您对整个树进行建模,每个元素都是一个节点,节点的专门化是文件夹,嗯,是叶子。您有一个“根”节点。节点有一个方法

    canHaveChildren() 
    getChildren() 
    

    叶节点具有明显的行为(甚至不需要点击网络)

    文件夹 getChildren() 获取下一组节点。

    我确实设计了一个系统,提供了Restful服务。似乎很容易编程。

        4
  •  0
  •   Nix    12 年前

    我不会使用“按查询导航”方法来执行此操作。只是因为我想坚持域模型,其中文件夹包含文件夹或页面。

    自定义序列化也可能很棘手,容易出现错误,而且很难更改\理解。

    FolderBowser

    干杯 埃米什

        5
  •  0
  •   Nix    12 年前

    经典的解决方案可能是使用 proxy pattern ,其中一些图形通过网络发送,并且 一些 其中的文件夹将替换为代理,在查询它们之前不会填充子文件夹列表。往返服务器需要大量时间,如果所有文件夹都是代理,则可能会导致请求过多(这将在每次检查文件夹内容时产生新请求),因此,您需要在每个数据块的大小和典型场景中所需的服务器请求数量之间进行权衡。这当然是特定于应用程序的,但是在例如深度2中发送所有子文件夹的内容可能是一个有用的策略。。。

    :最好的解决方案可能是#1,但由于往返服务器的开销,您希望一次发送多个文件夹。。。