Я хочу отправить предикат фильтрации постоянному субъекту, что может быть не так с этим? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть постоянный актер, который содержит некоторые значения.Мне нужно получить несколько отфильтрованных из них.Итак, у меня есть два способа:

1) Создать новое сообщение, скажем

GetValuesWithNameAndAgeGraterThan(name: String, age: Int)

pro: неизменяемый, ортодоксальный :) contra: проблема здесь в том, что логика просачивается в персистентного актера, который должен бытьответственность только за хранение и предоставление данных, и да, этот случай точно подходит для определения данных.Но почему он должен знать об «имени» и «возрасте» ценности, которую он хранит ?!А с завтрашнего дня мне нужно будет добавлять все больше и больше сообщений, которые в конце превратятся в беспорядок.

2) Создайте общее сообщение с предикатом фильтрации

Filter(p: Value => Boolean)

pro: одиночное, масштабируемоенеизменяемый при правильном использовании, напротив: я вижу единственную проблему, когда кто-то делает

val ages: mutable.Seq[Int]
persistor ? Filter(v => ages.contains(v.age))
ages += 18
ages += 33

, но мы обычно используем неизменные значения в Scala!а также было бы неестественно пытаться сохранить лямбду, но мы используем ее только для чтения!

Итак, что вы думаете?!

1 Ответ

1 голос
/ 09 апреля 2019

Никогда не следуйте второму подходу! Первый действителен, но id это немного меняет. Сначала вы могли бы договориться о каком-либо контракте для хранимых данных, например, о перечислении, где каждое значение содержит тип значения. Таким образом, вы изменяете ваше сообщение с помощью

GetValueForCondition(conditions: Seq[DataType, filter: Value => Boolean]), где DataType - это значение перечисления, указывающее имя и тип данных, а фильтр определяет условие для значения. Таким образом, вы можете указать общие запросы для сущностей, которые можно повторно использовать для запросов к другим субъектам хранения данных. Вы также можете включить логическое значение, указывающее для каждого поля данных, должно ли оно быть установлено для объекта, возвращаемого в результате. В случае, если вы храните всю эту информацию, принадлежащую одному объекту (например, имя, возраст, ...) в объекте Entity (например, у вашего постоянного субъекта есть некоторое хранилище для нескольких таких объектов), вы можете реализовать фильтрацию в целом в этом классе Entity, и ваш субъект предоставления данных свободен от этой логики.

...