面向对象的建模建议

时间:2014-11-22 16:50:29

标签: ruby-on-rails oop module composition

希望为我计划构建的RoR应用程序的建模决策提供一些指导。它将是一个托管多个租赁供应商的租赁平台。我假设以下类和/或模块,我的问题是关于建模,组合和继承。我想以下类和/或模块:

  • 产品(模块?包含在ProductLibrary,VendorCatalogue和Orders中)
  • 产品库(每个可能的租赁项目,has_many产品对象,1..n带产品)
  • 供应商(1..1与供应商目录,1..n与订单)
  • 供应商目录(来自'产品库对象'的has_many产品和每个'供应商'的个人,1..1与供应商)
  • 客户(1..n订单)
  • 订单(由供应商目录中的产品组成,1..1与客户,1..n与产品和n..1与供应商)
  • 也许应该有一个Account类,其中包含供应商和客户继承的公共帐户属性和方法?

借助我上面列出的方式来说,任何缺乏清晰度的借口,我都是OO和编程的新手。我可以对我的下面的想法有任何想法和建议吗?上述对象的最佳建模:

  • 我的想法是,产品应该是一个模块(?),因为其他类“有产品”,而不是“产品”?
  • 我不确定我是否需要一个产品库(它只是products.all?)?
  • 由于有多个供应商,每个供应商都有不同的产品系列/目录,我需要一个VendorCatalogue对象来包含每个供应商唯一的Product对象集合。这是最好的方法吗?
  • 是否应该让供应商和客户从父帐户类继承以保持DRY?
  • 最明智的地方是建立Products类/模块,ProductsLibrary(如果是rqd),然后是Vendors,然后是VendorCatalogue,然后是Customers,然后是Orders?

对上述任何帮助表示感谢,谢谢。

1 个答案:

答案 0 :(得分:0)

  

我的想法是,产品应该是一个模块(?),就像其他类一样   “有产品”,而不是“产品”吗?

我更喜欢将Product设为AR :: Model。事实上,它是一个独立的实体,具有自己的行为和状态。如果我理解了一切,那么它就是你应用的核心模型。

  

我不确定我是否需要一个产品库(只是它   products.all?)?

如果您将拥有一些复杂的产品搜索逻辑,那么您应该制作类似ProductRepository的东西。在此处查看存储库模式:http://msdn.microsoft.com/en-us/library/ff649690.aspx

  

由于有多个供应商,每个供应商都有不同的产品   范围/目录,我需要一个VendorCatalogue对象来包含每个   供应商产品对象的唯一集合。这是最好的方法吗?   这样做?

当然你应该制作这个对象。

  

应该让供应商和客户从父帐户类继承   保持干燥?

这取决于你的逻辑。如果客户和供应商都有一些帐户,包括交易,提款等,那么您可以同时包含两个帐户模块。 不过要小心。你应该想一想。如果它们具有不同的逻辑,那么它们中的每一个都应该具有CustomerAccount或VendorAccount。

  

最合情合理的地方是建立产品吗?   class / module,ProductsLibrary(如果是rqd),然后是Vendors   VendorCatalogue,然后是Customers,然后是Orders?

我认为这个顺序足够好了。