我们正在为ruby使用AWS -sdk,特别是AWS::Record::Base。
由于各种原因,我们需要将同一域中不同对象的记录放在sdb中。
我们认为在这里使用的方法是为每个包含对象名称的对象添加一个属性,然后在从sdb获取对象时将其包含在查找器方法的where子句中。
我对读者的问题是:
-
您对这种方法有什么看法?
-
这将如何最好地实现整洁?如何最好地添加对象中包含的默认属性,而不需要在每个模型中显式地定义它?重写find或finder方法中的where是否足以确保从sdb获取对象包括考虑新的默认属性的子句?
思想感激。
-
这真的取决于你的问题,但我觉得它有点令人讨厌。变体记录很好,但是当您开始使用苹果和恐龙并且它们没有共同属性时,这种方法就没有我所知道的任何好处[除了保存250个SimpleDB域的配额(看起来毫无意义)]。如果您的记录有一些共同点,那么我可以看到这种方法可能有用的地方,但是像我这样的人在Btrieve中使用带有变体记录的遗留系统(通过C union实现)对这种方法有一种根深蒂固的反感。
-
我能想到的最干净的方法是通过继承让您的模型共享一个共同的父节点。然后,父节点可以知道子节点类型,并适当地实现查询。然而,这种设计绝对不是SOLID,并且违反了Demeter定律。