gpt4 book ai didi

sql - Ruby on Rails 最佳设计模式而不是单表继承?

转载 作者:数据小太阳 更新时间:2023-10-29 08:43:09 25 4
gpt4 key购买 nike

我是一名从事新 Rails 应用程序开发的初级开发人员,需要一些帮助来确定哪种设计模式最适合用于为不同类型的订单建模。我正计划使用单表继承模式来解决这些问题,但听到一些开发人员说我应该远离这种模式。任何想法表示赞赏!

订单需要不同的类型。每种类型共享一些数据库列,但是也需要一些其他类型不共享的列(随着我们进一步发展业务并开始处理新类型的订单)。我想避免在不同的数据库表中重复列,我也想避免为所有内容使用一个表,因为每种类型不需要单个表中的所有内容。

订单可以由客户创建,也可以由代表其客户的零售商创建。另一种类型的订单是我们在客户发送订单之前直接发送给客户的 WelcomeKit

所有订单都需要以下内容:

  • 客户编号
  • fullfilled - bool 值
  • 完成日期
  • outgoing_shipment_id
  • 总计
  • 小计
  • discount_total

所有 RepairOrders 还需要以下内容:

  • 到达( bool 值)
  • 到达日期
  • incoming_shipment_id
  • repairer_id(进行维修的商店)

所有 RetailOrders 都需要 Orders 和 RepairOrders 的所有内容,并且:

  • retailer_id(创建订单的商店)
  • retailer_order_id(零售商订单的 ID)

所有 WelcomeKits 只需要订单表中的信息。

单表继承是处理这个问题的最佳方式吗?还有其他更适合长期可维护性的模式吗?任何关于数据库和模型设计的具体帮助都会很棒!谢谢。

最佳答案

我强烈建议您阅读 Sandi Metz 的书 Ruby 中的实用面向对象设计,因为它非常详细地涉及了这个主题。由于我现在没有它,我会复制一个简短的段落written Ben Johnson 总结了总体策略:

Always prefer composition to inheritance (classes) unless you candefend inheritance. Also, consider if you have one basic thing withsubtypes or something that is made up of parts.

If X is-a Y → Inheritance (class)

If X has-a Y → Composition

IF X behaves-like-a Y → Duck type (module)

Good design naturally progresses towards small, independent objects that rely on abstractions.

我认为在您的特定情况下,继承可能是一个不错的选择。

关于sql - Ruby on Rails 最佳设计模式而不是单表继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44479527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com