【问题标题】:OOP and PersistenceOOP 和持久性
【发布时间】:2013-09-14 09:20:44
【问题描述】:

本着“不问不问,绝不让对象进入无效状态 oop 设计”的精神,我想知道如何在动态环境中处理持久性。

举一个人为的例子,假设您需要为一家航空公司编写一个 POS 应用程序。您只能出售可用的座位。座位按平面 -> 部分 -> 行 -> 座位分组。如果某个部分不可用,则该部分中的所有行以及因此的座位也将不可用。显然,如果一排不可用,那么该排的所有座位也不可用。
现在环境是高度动态的,因为维护人员可能经常使部分、行或座位可用/不可用。此外,想象一下构建飞机对象图有点昂贵。但是,如果不为每次销售尝试构建整个图表,我看不出如何将业务规则排除在持久层之外,在我看来这是绝对必须的。
oop 不是解决此类问题的可行选择吗?

编辑: 如果有所不同,假设系统由数据库服务器持久化,并且系统的输入是通过 http 瘦客户端进行的。

【问题讨论】:

    标签: oop architecture


    【解决方案1】:

    我不明白为什么你不能一次构建飞机对象,然后在运行中管理它?您必须确保并发访问的安全,但这不正是 OOP 适合的问题类型吗?

    也许我误解了你的情况。

    【讨论】:

    • 您知道,最初,所有座位都是空的,每次尝试分配座位时都会运行一个例程来检查座位是否无效,然后如果该行无效,那么如果飞机是已满。
    • 据我所知,我什至不会使用图表来解决这个问题。
    • 这就是问题所在。飞机物体住在哪里?假设销售终端是一个 Web 客户端。为了获得待售座位列表,您需要了解整架飞机。此外,当您将客户信息输入系统时,您所销售的座位可能已不可用。
    • 如果您在数据结构上使用锁定策略,则不会。每当服务员选择一个开放的座位时,如果在他们选择它时它是开放的,则软件会在该座位上获得一个锁定,并且在信息输入期间它不会变得不可用。 en.wikipedia.org/wiki/Lock_%28computer_science%29
    • 如果单个对象存储在内存中的某处,您当然可以使用一些互斥方案。不过,我不确定您将如何实现这是一个断开连接的环境。如果系统的输入是基于网络的,你会怎么做?
    【解决方案2】:

    将座位可用性与飞机本身分开。不能在每次请求时重建整个飞机,但每次都可以请求座位可用性。

    availableSeats = availabilityService.getAvailableSeats(flightId)

    availableSections = planeObj.getAvailableSections(seatAvailabilityList)

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 2011-10-18
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多