2017-01-03 7 views
0

Я смотрел в Event Store ненадолго, и одна вещь, которая меня задевала, - это когда нужно подумать о написании проекции? Обычная практика заключается в создании сплющенной проекции?EventStore Прогнозы, когда их использовать

Установка здесь с использованием потока в совокупности

Например, предположим, что у меня есть 2 события, которые выглядят следующим образом:

public class OrderPlaced 
{ 
    public OrderPlaced(string reference, Currency currency, Amount amount) 
    { 
     ... 
    } 

    public string Reference { get; } 

    public Currency Currency { get; } //Custom type 

    public Amount Amount { get; } //Custom type 
} 

public class OrderCompleted 
{ 
    public OrderCompleted(string reference) 
    { 
     this.Reference = reference; 
    } 

    public string Reference { get; } 
} 

У меня есть следующий запрос:

fromCategory('MyCategory') 
    .whenAny(function(s, e) { 
     linkTo("Foo", e); 
    }) 

Вышеупомянутое не очень много значит и объединяет все потоки int o единственное число. Возможно ли проецировать более плоское представление, например, в нечто подобное? Возможно, я получил свои проводы, но, видимо, используя emit, вы можете это достичь?

{ 
    string Reference; 
    string CurrencyCode; 
    decimal PayingAmount; 
} 

Мое мышление, когда я писал в потоке я могу гарантировать совокупность находится в допустимом состоянии и, таким образом, для любых заинтересованных сторон, я должен выставить только поля эти процессы требуют. Проецирует простую модель (де-номарглизированный вид) правильную вещь.

Вышеприведенный пример, но вы можете себе представить, что совокупность немного сложнее.

Если я пропустил что-либо или вам необходимо уточнить, пожалуйста, прокомментируйте, и я могу добавить.

+0

Звучит нормально для меня. Я думаю, что Projections по-прежнему находятся в стадии бета-версии, предположительно, в 4.0.0. Прочитали ли вы существующие документы по проектам? http://docs.geteventstore.com. В проекте, над которым я работал, мы использовали встроенные прогнозы, когда у нас было какое-то простое состояние, которое мы хотели запросить (имена пользователей должны были быть уникальными, поэтому мы поддерживали прогнозы имен пользователей в пользовательских агрегатах/потоках). – tomliversidge

+0

Я читал документы, и мне не хватает деталей. Можно ли загружать поток в запрос, чтобы вы могли вытащить весь агрегат? Это значит, что если я получу событие 2, загрузите весь агрегат, захватите информацию из обоих событий 1 и 2 и создайте сплющенный вид. Это возможно? –

+0

Вы можете подписаться на категорию, которая представляет вашу совокупность (в моем примере, «пользователи»), затем используйте простые инструкции JavaScript, чтобы определить, что делать с каждым типом события ... I.e. Если тип события = eventtype1 {} и т. Д. – tomliversidge

ответ

0

Вы ищете стандартную проекцию категории событий.

Он испускает связанные события в пар, которые называются «$ ce-». В категории есть тип вашего объекта.

Например, ваш агрегат типа Order, и запись событий OrderCreated, OrderLineAdded и т.д., чтобы потоки с именами Order-1, Order-2, где 1 и 3 являются вашими совокупными корневыми идентификаторами. Затем поток $ce-Order будет содержать все события для всех агрегатов этого типа.

Посмотрите на standard projections documentation.

Обычно это способ создания прогнозов на стороне чтения - путем создания догоняющей подписки на потоки категорий и соответственно обновления модели чтения.

Для того чтобы запускать проекции, вам необходимо использовать --run-projections=all –-start-standard-projections=true, чтобы увидеть его работу.