【发布时间】:2011-03-24 08:03:16
【问题描述】:
我一直在努力解决一个设计问题,我承认我对 OOP 和 RoR 都是新手,所以我确信这将是非常基础的。我有一个应用程序,我正在读取各种格式的文本文件,以解析与扑克牌相关的信息。所以我拥有的是三个实体:
一个文件对象。它存储文件的名称和路径以及一些其他属性,并具有与从文件读取相关的功能。这是 MVC,因为我可以添加一个文件并让它自动更新,或者我可以动态解析文件中的信息。
扑克手对象。这本质上只是存储有关谁玩了扑克牌以及操作和结果的信息。
解析器。这会根据正在读取的文件类型读取具有不同正则表达式模式的外部 JSON 文件。它还在 JSON 文件中包含一些基本的状态机信息,以便从解析器中删除大量逻辑。
所以我对解析器的最初感觉是它应该是它自己的对象。但后来我意识到它没有 V 或 C,因此可能不适合 Rails 的做事方式。它也没有文件对象以外的任何对象所需的任何功能,因此似乎适合文件。但与此同时,它与文件对象如此明显不同,以至于它似乎不适合。我想到了一个模块,但模块的意义似乎是多个对象共享某些功能的需求,而在这种情况下只有文件。
那么它应该是它自己的对象,在文件对象中,还是有其他我没有看到的替代方案?
【问题讨论】:
-
它不属于文件对象,但您可以将其作为类函数添加到文件对象的模型中。即如果 Document 是文件对象的模型,则可以在 Document 模型中定义
self.parse_info(info),这样就可以像Document.parse_info(json_string)一样调用它。它将是一个类方法,而不是实例方法。 -
对不起,我可以理解让解析方法成为 File 类的一部分,并且它们将与 File 实例分开。但我不明白 Document 模型的来源。您是否假设 File 应该是从 Document 继承的?为什么解析对 Document 比对 File 更有意义,是否值得拥有一个 Document 类只是为了从 File 类中删除解析?我很感激这个建议,但我只是想理解..
-
我假设您将有一个名为
Document(或任何您想要的)的模型来表示您的文件,其中包含属性名称、文件路径等。Document只是我给的一个名称到模型。
标签: ruby-on-rails ruby oop