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

将对象从应用服务器序列化到web服务器而不重复代码的方法

  •  1
  • Zak  · 技术社区  · 17 年前

    我有一个web应用程序数据库3层服务器设置。Web从应用程序请求数据,应用程序从数据库获取数据,然后处理并返回给Web进行显示。标准。

    目前,我从应用程序序列化到web的所有数据都被放入自定义的数据结构中,然后web端解析这些数据结构进行显示。换句话说,假设我有一个订单,我想检索并发送到网络。我不序列化整个对象,而是在应用服务器上使用适当的数据元素构建一个数组,然后将该数组序列化到web服务器上。

    现在,我正在研究将整个订单对象序列化到web服务器。

    你们发现的在保持应用服务器和Web服务器代码分离的同时序列化对象的最佳方法是什么?我不希望我的Web服务器有任何访问数据库的代码,但我希望它们尽可能重用封装我的订单和其他数据的类。

    为了进一步完善我的问题(感谢Glenn的回答),我不希望我的Web服务器有任何业务逻辑,比如订单类,只有应用服务器需要知道。这些对象已经在数据库和Web服务器之间使用了单独的序列化。

    使用订单示例,在应用服务器上,订单应该能够取消:即

    $order->cancel();

    但在Web服务器上,甚至不应该找到该方法。它不应该简单地(直接)代理回应用服务器订单的取消方法,因为用户操作请求应该通过应用程序的授权和权限检查层。

    那么,我如何在我的Web服务器上获得一个订单对象,该对象具有应用服务器上对象的一些(但不是全部)方法和属性,几乎没有代码重复。我一直在想的一件事是创建一个具有有限属性和方法集的基类。它将使用一个内部类来保存其属性,我需要所有数据访问才能传入和传出getter和setter。这些将依次调用内部类上的getter和setter。

    然后,web和应用服务器可以独立扩展基类,并使用自定义内部类来保存属性。例如,在应用程序端,内部类可以是一个可以将数据持久化到数据库的ORM类扩展,而在web端,内部类时可以是简单的属性持有者类。

    但整个内部阶级的事情似乎有点笨拙,所以我仍在寻找更好的解决方案。

    2 回复  |  直到 17 年前
        1
  •  3
  •   Glenn    17 年前
    • 排除特定格式 将序列化代码转换为单独的 类使用 Adapter pattern .您的问题域 类成为后备存储 中立。
    • 在应用层上使用特定于关系数据库的适配器类将对象序列化到数据层和从数据层序列化对象。
    • 在web层上使用特定于HTML的适配器类将对象序列化到web浏览器和从web浏览器序列化对象。
    • 在web和应用层上使用XML(或您认为最合适的任何有线协议友好格式)特定的适配器类来序列化web层和应用层之间的对象。
    • 如果你足够聪明,能够弄清楚如何使这些适配器类足够通用,这样你就不需要为每个问题域类设置不同的适配器类,那么你会得到额外的分数。
        2
  •  1
  •   troelskn    17 年前

    如果我正确理解了你的问题,你想序列化对象的数据,但当它们被重新水合时,它们应该被序列化为不同类型的对象(具有有限和/或不同的功能)?

    根据您喜欢的协议,您可以通过不同的方式做到这一点。例如,您可以使用SOAP。然后,您应该在客户端将对象水合到与服务器端不同的类中。你也可以使用PHP的原生 serialization 或者a)在客户端使用不同的代码库(可能会让人困惑),或者b)用序列化字符串进行一些模拟(例如替换类名)。 A crude example 可以在PHP手册的注释中找到。

    推荐文章