Tag: 设计模式

策略模式文件位置Rails

我有几个问题:遵循我对该问题的完美回应。 业务逻辑依赖于模型属性 。 我计划使用策略模式,我想知道我(在哪个文件夹中)应该放置类文件的位置? 他们应该进入模特文件夹吗? 此外,我有一个默认行为,我是否仍然需要创建一个Interface类并从中派生我的默认策略,或者我将默认策略定义为基本策略?

我应该将自定义方法从控制器移动到模型吗?

假设我有一个Product model和ProductsController。 控制器具有所有标准的CRUD方法,产品可以进行各种validation等。 这是一个问题。 我有几个自定义非常复杂的动作,也需要以多种格式(json,html,xml,csv,pdf等)进行响应。 业务逻辑原因超出了问题的范围。 让我们这样做是必须的。 我也使用了InheritedResources gem,但我不认为这个问题很重要。 例如(这是一个模拟应用程序,它非常简化 – 我删除了各种if else语句和循环和本地化等): class ProductController 5 @po = LegacyOrder.create_po if @po if @order.save format.html{ render :check_stock_using_legacy_identifier_and_create_a_unique_po_number_and_place_an_order, flash: {success: “Wow! Input was good!”}} format.json{ render status: 400, json: {status: :success, message: “Order created”}} else format.html{ render :check_stock_using_legacy_identifier_and_create_a_unique_po_number_and_place_an_order, flash: {error: “Can’t create order, some validations failed”}} format.json{ […]

HABTM找到“AND”连接,而不是“OR”

我有两个模型,与HABTM相关联(实际上使用has_many:两端的连接,以及连接表)。 我需要检索与两个ModelB的BOTH相关联的所有ModelAs。 我不希望ModelB_1的所有ModelAs都与ModelB_2的所有ModelAs连接在一起。 我真的想要所有与BOTH ModelB_1和ModelB_2相关的ModelAs。 它不仅限于2个ModelB,最多可能有50个ModelB,因此必须进行扩展。 我可以使用各种类比来描述问题,我认为比前一段更好地描述了我的问题: * Find all books that were written by all 3 authors together. * Find all movies that had the following 4 actors in them. * Find all blog posts that belonged to BOTH the Rails and Ruby categories for each post. * Find all users that had all […]

什么是DCI以及它如何适应Rails?

最近与同事讨论了在Rails应用程序中设计和编码模型的不同方法,这使我在Rails环境中跨越了DCI 。 但是,即使在查看这个示例应用程序之后,我似乎无法绕过整个概念。 目前,在编写Rails应用程序时,我倾向于或多或少地“ 按书 ”。 所以我想问一些事情 – 什么是DCI,与MVC一起实现的普通旧MVC(以及Rails中的vanilla ActiveRecord)有什么优势? 如何在Rails中实现(或者换句话说, 在所有模块中实现什么 )? 编辑 我想在RoR的上下文中进一步扩展我的问题 – Rails建议的模型和控制器之间的另一个抽象层次是什么? 它在不同规模的应用中有多广泛?

你会推荐什么版本设计模式

我需要在应用程序中构建“版本控制”,并且想知道如何最好地处理它。 我有这个一般模式: 模型A有很多B 在更新时,A的属性需要进行版本化,并且其关联对象(B)也需要进行版本控制。 因此,应用程序将显示A的当前版本,但也必须能够查看A的早期版本及其关联对象。 我想使用文档存储,但这只是应用程序的一部分,并且拥有doc存储和关系数据库会带来更多复杂性。 我考虑过使用星型模式,但在我进步之前,我想知道是否有一个设计模式可以解决这个问题? 这个问题倾向于解决在关系数据库中存储关联对象的版本的问题。 哪里有固有的需要能够有效地查询数据(即序列化对象是不够的)。 更新:我在想什么/已实施但想看看它是“更好的方式” ,———. 1 * ,——–. | Model A |———-| Model B| `———‘ `——–‘ |PK | | a_id | |b_version| |version | |version | `——–‘ `———‘ 我将复制模型A和所有相关的B并增加版本属性。 然后通过b_version和b.version进行选择以加入B’。 只是想知道这是否可以做得更好。

模型和助手中的常用方法

我有一个常见的方法存在于我的模型中,因为它是由我的模型调用的。 回顾一下,我的观点也需要这种模型方法。 为了实现这一目标,我有: 将模型方法移动到application_helper.rb文件 我的模型通过在ActiveRecord模型的顶部添加include ApplicationHelper调用application_helper方法 function明智,它的工作原理。 但这是一个好习惯吗? 我的模型看起来像这样: class Client < ActiveRecord::Base include ApplicationHelper end

具有多个角色的人的设计模式

我想创建一个基本模型Person ,其中包含一些与人物相关的属性,如姓名,地址,电话等。 一个Person可以是以下一种或多种 : LoginUser包含登录,密码,last_login,…的字段 CardHolder ,包含card_id,last_entrance,…的字段 只有一个标志的Supplier ,无论该人是否是供应商 无论该人是否是Recipient ,只Recipient一个标志的收件人 Ruby on Rails中是否存在常识或最佳实践设计模式来表示inheritance? 它应该如何在模型和表结构中表示,以便可以检查Person是否是LoginUser并访问相应的字段。 在另一个项目中,我已经与STI合作,但在这种情况下,这不是正确的模式。

如何设计一个保持SOLID原则和设计模式的应用程序

在启动时说ruby中的应用程序有两种模式:命令行模式和文件模式 给定参数ruby myprogram input.txt output.txt时 ,它会根据输入文件中的某些命令生成输出。 当没有提供任何参数时,它会向我们提供命令提示符。 使用以下命令。 create_class_with_capacity 40 create_student_with_marks Alex 70 create_student_with_marks Mathew 30 create_student_with_marks John 55 .. create_student_with_marks Sylvia 70 etc… fail_student_roll_no 12 => Student with roll number 12 #{student} failed give_marks_to_roll_no 70 1 =>Student with roll number 1 Alex got 70 marks find_all_students_with_marks 70 => Alex, Peter , Russell , Mark […]

Ruby模块可以被描述为单例类吗?

我试图从设计模式的角度来理解Ruby模块的目的。 Ruby模块本质上只是一个只初始化一次的类吗? include MyModule

从ruby内部进行施工质量分配

可能重复: 在ruby中创建惯用对象 有时,在构造上为实例变量分配许多构造的参数是有用的。 除了明显的方法: def initialize(arg1, arg2, arg3) @arg1, @arg2, @arg3 = arg1, arg2, arg3 end 是否有更简洁的习惯用于实现相同的结果? 像scala中发现的东西,例如: class FancyGreeter(greeting: String) { def greet() = println(greeting) } 在这种情况下,对象FancyGreeter有一个默认构造函数,为它传递的参数提供赋值。