我正在使用 RoR 构建这个 Restful 应用程序,我发现很难在应该在模型上进行的事情和应该在 Controller 上进行的事情之间划清界线。
举个例子,我的 Controller 上有 7 个方法(那些让它变得安静的方法,即 index()、show()、create()、update()...),并且经常发现有必要添加额外的方法,并通过将它们创建为成员来实现。
我想在这里完成的是从你们那里收集关于什么发生了什么的经验(即我应该把所有的数据库交互都放在模型上,然后简单地从 Controller 调用这些方法吗?)
此外,通过将不涉及数据库的内容添加到我的 Controller 中,即我想进行 HTTP 调用以从网站屏幕抓取一些数据。
HTTP 调用可能会变得庞大而困惑。所有这些都应该交给我的 Controller ,还是应该放在一个单独的类或模块中,并且只包含在我的 Controller 中以便调用它?
如果是这样,最好的方法是什么?
我对这一切有点困惑,所以如果有人能提供意见就太好了。
提前致谢
最佳答案
它是 Domain Driven Design 的一部分.
领域是定义应用程序尝试处理和解决问题的领域的知识领域。
模型层被认为是领域层。在这里保留了定义域或业务逻辑的所有规则。该模型以定义域的方式充当真实数据和应用程序其余部分之间的过滤器。
域的实现细节(mySQL 或 MSSql 或 Webservice 或 Xml 文件或外部网页或其他)被模型隐藏。
Controller 只是信使。它的工作是从用户那里获取消息并将它们传递给模型。模型给出回复, Controller 找出将回复传递给用户的最佳方式。
View 就像化妆师,只是确保数据看起来漂亮并且适合用户。
您正在抓取的网站可被视为域的一部分。该站点包含定义您的应用正在定义的世界的知识。屏幕抓取过程以某种方式塑造该知识,使其与您的应用程序定义的世界 View 的其他部分相关联。 Controller 不关心这些信息从何而来,它只会将消息传递给 View。 View 会对数据进行处理并使其美观,然后将其发送给用户,用户完全不会注意到整个过程,只会看到一个漂亮的网页!
关于ruby-on-rails - 画出模型和 Controller 之间的界限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2363121/