我想将过滤谓词发送给持久化演员,这可能有什么问题?
I want to send filtering predicate to persistent actor, what may be wrong with this?
我有一个坚持不懈的演员,他持有一些价值观。我需要得到一些经过过滤的。所以,我有两个办法:
1) 创建新消息说
GetValuesWithNameAndAgeGraterThan(name: String, age: Int)
pro: 不变的,正统的:)
相反:这里的问题是逻辑泄漏到只负责保存和提供数据的持久性参与者中,你,这种情况完全适合提供数据定义。但它为什么要知道它保留的 "name" 和 "age" 价值呢?!
从明天开始,我将需要添加越来越多的消息,最后会变得一团糟。
2) 使用过滤谓词创建通用消息
Filter(p: Value => Boolean)
pro:单一、可扩展、正确使用时不可变
相反:我看到有人这样做时唯一的问题
val ages: mutable.Seq[Int]
persistor ? Filter(v => ages.contains(v.age))
ages += 18
ages += 33
但我们通常在 Scala 中使用不可变值!
而且尝试持久化 lambda 也是不自然的,但我们将它用于只读!
那么,你怎么看?!
永远不要遵循第二种方法!
第一个是有效的,但 id 稍微改变了这一点。
您最初可以就存储数据的某些合同达成一致,例如,可能是一个枚举,其中每个值都带有一个值类型。
所以你用
修改你的消息
GetValueForCondition(conditions: Seq[DataType, filter: Value => Boolean])
,其中 DataType 是一个枚举值,指定数据的名称和类型,过滤器定义值的条件。
通过这种方式,您可以为实体指定通用查询,该查询可重复用于对其他数据存储参与者的请求。您还可以包括一个布尔值,指示每个数据字段是否必须为要在结果中返回的实体设置它。如果您将属于一个实体的所有这些信息(例如姓名、年龄等)存储在一个实体对象中(例如您的持久性 actor 有一些存储多个这样的实体),您可以在该实体 class,你的数据提供者没有这个逻辑。
我有一个坚持不懈的演员,他持有一些价值观。我需要得到一些经过过滤的。所以,我有两个办法:
1) 创建新消息说
GetValuesWithNameAndAgeGraterThan(name: String, age: Int)
pro: 不变的,正统的:) 相反:这里的问题是逻辑泄漏到只负责保存和提供数据的持久性参与者中,你,这种情况完全适合提供数据定义。但它为什么要知道它保留的 "name" 和 "age" 价值呢?! 从明天开始,我将需要添加越来越多的消息,最后会变得一团糟。
2) 使用过滤谓词创建通用消息
Filter(p: Value => Boolean)
pro:单一、可扩展、正确使用时不可变 相反:我看到有人这样做时唯一的问题
val ages: mutable.Seq[Int]
persistor ? Filter(v => ages.contains(v.age))
ages += 18
ages += 33
但我们通常在 Scala 中使用不可变值! 而且尝试持久化 lambda 也是不自然的,但我们将它用于只读!
那么,你怎么看?!
永远不要遵循第二种方法! 第一个是有效的,但 id 稍微改变了这一点。 您最初可以就存储数据的某些合同达成一致,例如,可能是一个枚举,其中每个值都带有一个值类型。 所以你用
修改你的消息GetValueForCondition(conditions: Seq[DataType, filter: Value => Boolean])
,其中 DataType 是一个枚举值,指定数据的名称和类型,过滤器定义值的条件。
通过这种方式,您可以为实体指定通用查询,该查询可重复用于对其他数据存储参与者的请求。您还可以包括一个布尔值,指示每个数据字段是否必须为要在结果中返回的实体设置它。如果您将属于一个实体的所有这些信息(例如姓名、年龄等)存储在一个实体对象中(例如您的持久性 actor 有一些存储多个这样的实体),您可以在该实体 class,你的数据提供者没有这个逻辑。