Model view controller 模型应该与外部服务交互吗?

Model view controller 模型应该与外部服务交互吗?,model-view-controller,Model View Controller,示例1: 模型类“News”以两种不同的语言存储其文本(字段:en_text,jp_text)。通常它只有一种语言的文本。我应该在使用Google translate API保存之前翻译回调中的文本,还是应该将此代码放在控制器中 示例2 一个模型类“付款”。当要结算付款时,系统必须通知外部服务成功结算付款。这个代码应该放在哪里,模型还是控制器?模型通常用于“获取”或“设置”数据,所以从技术上讲,如果您的外部服务提供了“获取”或“设置”数据的服务,那么是的。您的模型应该是应用程序的整个业务逻辑。对

示例1:

模型类“News”以两种不同的语言存储其文本(字段:en_text,jp_text)。通常它只有一种语言的文本。我应该在使用Google translate API保存之前翻译回调中的文本,还是应该将此代码放在控制器中

示例2


一个模型类“付款”。当要结算付款时,系统必须通知外部服务成功结算付款。这个代码应该放在哪里,模型还是控制器?

模型通常用于“获取”或“设置”数据,所以从技术上讲,如果您的外部服务提供了“获取”或“设置”数据的服务,那么是的。

您的模型应该是应用程序的整个业务逻辑。对你的申请的要求意味着你应该翻译你的文本或在付款时通知一些服务,不是吗?这意味着你应该把它写在你的模型中

控制器是一个实体,它处理一些业务逻辑操作的请求参数。控制器不应包含此类部件

据我所知,您目前正在使用Rails,因此请查看以下链接(此模式对非Ruby程序员也很有帮助):


-classics:)

实际上,我建议不要使用活动记录,因为它会将域业务逻辑推送到控制器中。另外,问题是关于MVC而不是MVP的。@tereško 1)ActiveRecord表示数据库记录的业务逻辑包装器。ActiveResource几乎是一样的,只是它包装了外部资源。2) 我不理解你对MVP的看法。我说的正是MVC。是的,你不明白。这就是重点。是反模式,因为在使用时,无法将存储访问与域业务逻辑分离。您可以创建绑定到数据库实体的结构。您最终会遇到域逻辑在控制器中泄漏的情况,因为在模型层中已经没有位置了。@tereško此特定应用程序的业务逻辑意味着将结果存储在数据库中。所以我不同意ActiveRecord在这种情况下是反模式的。如果你只是想开始关于ActiveRecord和DataMapper的圣战,那么这不是一个好地方。但若你们试图说控制器应该包含这个逻辑,那个么你们应该阅读更多关于MVC模式的内容。控制器不能包含它。我在哪里说过控制器应该包含逻辑?请指向那条线!