实现思路
- 定义类及属性:首先定义包含多个属性的类。
- 使用元数据存储追踪信息:通过为每个属性创建对应的元数据存储结构,用于记录首次读取时间、最后修改时间和修改用户标识。
- 属性访问方法重写:重写属性的读取和写入方法,在读取时记录首次读取时间,在写入时更新最后修改时间和修改用户标识。
关键代码片段
class MyComplexClass
# 假设获取当前用户标识的方法
def current_user_id
# 实际实现获取当前用户标识逻辑
"user123"
end
def initialize
@meta_data = {}
end
def define_tracked_attribute(attr_name)
# 定义属性的读取方法
define_method(attr_name) do
if @meta_data[attr_name].nil? || @meta_data[attr_name][:first_read].nil?
@meta_data[attr_name] ||= {}
@meta_data[attr_name][:first_read] = Time.now
end
instance_variable_get("@#{attr_name}")
end
# 定义属性的写入方法
define_method("#{attr_name}=") do |value|
@meta_data[attr_name] ||= {}
@meta_data[attr_name][:last_modified] = Time.now
@meta_data[attr_name][:modified_by] = current_user_id
instance_variable_set("@#{attr_name}", value)
end
end
end
# 使用示例
my_obj = MyComplexClass.new
my_obj.define_tracked_attribute(:example_attr)
my_obj.example_attr = "initial value"
puts my_obj.example_attr
puts my_obj.instance_variable_get(:@meta_data)