示例#1
0
        public void SaveAndLoadWithEntityRepository()
        {
            Converts.Repository
            .AddJsonKey()
            .AddJsonEnumSearchHandler()
            .AddJsonPrimitivesSearchHandler()
            .AddJsonObjectSearchHandler();

            ICompositeTypeProvider       compositeTypeProvider = new ReflectionCompositeTypeProvider(new ReflectionCompositeDelegateFactory());
            IFactory <ICompositeStorage> storageFactory        = new GetterFactory <ICompositeStorage>(() => new JsonCompositeStorage());

            EventSourcingContext context    = new EventSourcingContext(@"Data Source=.\sqlexpress; Initial Catalog=EventStore;Integrated Security=SSPI");
            EntityEventStore     eventStore = new EntityEventStore(context);

            PersistentEventDispatcher eventDispatcher = new PersistentEventDispatcher(eventStore);

            AggregateRootRepository <Order> repository = new AggregateRootRepository <Order>(
                eventStore,
                new CompositeEventFormatter(compositeTypeProvider, storageFactory),
                new ReflectionAggregateRootFactory <Order>(),
                eventDispatcher,
                new NoSnapshotProvider(),
                new EmptySnapshotStore()
                );

            PersistentCommandDispatcher commandDispatcher = new PersistentCommandDispatcher(
                new SerialCommandDistributor(),
                new EntityCommandStore(context),
                new CompositeCommandFormatter(compositeTypeProvider, storageFactory)
                );

            CreateOrderHandler  createHandler  = new CreateOrderHandler(repository);
            AddOrderItemHandler addItemHandler = new AddOrderItemHandler(repository);

            commandDispatcher.Handlers
            .Add <CreateOrder>(createHandler)
            .Add <AddOrderItem>(addItemHandler);

            CreateOrder create = new CreateOrder();

            commandDispatcher.HandleAsync(create);

            eventDispatcher.Handlers.Await <OrderPlaced>().Wait();

            IEnumerable <EventModel> serializedEvents = eventStore.Get(create.OrderKey).ToList();

            Assert.AreEqual(1, serializedEvents.Count());

            AddOrderItem addItem = new AddOrderItem(create.OrderKey, GuidKey.Create(Guid.NewGuid(), "Product"), 5);

            commandDispatcher.HandleAsync(Envelope.Create(addItem).AddDelay(TimeSpan.FromMinutes(1)));

            Task <OrderTotalRecalculated> task = eventDispatcher.Handlers.Await <OrderTotalRecalculated>();

            task.Wait();
            Console.WriteLine(task.Result);

            serializedEvents = eventStore.Get(create.OrderKey).ToList();
            Assert.AreEqual(4, serializedEvents.Count());
        }
        public void Reflection_SingleVersion()
        {
            ReflectionCompositeTypeProvider provider = new ReflectionCompositeTypeProvider(new ReflectionCompositeDelegateFactory());
            CompositeType compositeType;

            Assert.AreEqual(true, provider.TryGet(typeof(SingleVersion), out compositeType));
            AssertSingleVersion(compositeType);
        }
        public void Reflection_Reflection_FullyDefined()
        {
            ReflectionCompositeTypeProvider provider = new ReflectionCompositeTypeProvider(new ReflectionCompositeDelegateFactory());
            CompositeType compositeType;

            Assert.AreEqual(true, provider.TryGet(typeof(UserModel), out compositeType));
            AssertUserModel(compositeType);
        }
        public void Reflection_DefaultConstructorExplicitProperties()
        {
            Converts.Repository
            .AddJsonPrimitivesSearchHandler()
            .AddJsonObjectSearchHandler();

            ReflectionCompositeTypeProvider provider = new ReflectionCompositeTypeProvider(new ReflectionCompositeDelegateFactory());
            CompositeType compositeType;

            Assert.AreEqual(false, provider.TryGet(typeof(MisspelledParameterName), out compositeType));
        }
示例#5
0
        private long BuildComposityType()
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();
            ICompositeTypeProvider provider = new ReflectionCompositeTypeProvider(new ReflectionCompositeDelegateFactory());
            CompositeType          compositeType;

            provider.TryGet(typeof(UserModel), out compositeType);
            sw.Stop();
            return(sw.ElapsedMilliseconds);
        }
示例#6
0
        private void Domain()
        {
            Converts.Repository
            .AddJsonEnumSearchHandler()
            .AddJsonPrimitivesSearchHandler()
            .AddJsonObjectSearchHandler()
            .AddJsonKey()
            .AddJsonTimeSpan()
            .Add(new ColorConverter());

            EventStore      = new EntityEventStore(Factory.Default <EventSourcingContext>());
            eventDispatcher = new PersistentEventDispatcher(new EmptyEventStore());
            eventDispatcher.DispatcherExceptionHandlers.Add(this);
            eventDispatcher.EventExceptionHandlers.Add(this);

            IFactory <ICompositeStorage> compositeStorageFactory = Factory.Default <JsonCompositeStorage>();

            ICompositeTypeProvider typeProvider = new ReflectionCompositeTypeProvider(
                new ReflectionCompositeDelegateFactory(),
                BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public
                );

            EventFormatter = new CompositeEventFormatter(typeProvider, compositeStorageFactory);

            OutcomeRepository = new AggregateRootRepository <Outcome>(
                EventStore,
                EventFormatter,
                new ReflectionAggregateRootFactory <Outcome>(),
                eventDispatcher,
                new NoSnapshotProvider(),
                new EmptySnapshotStore()
                );

            CategoryRepository = new AggregateRootRepository <Category>(
                EventStore,
                EventFormatter,
                new ReflectionAggregateRootFactory <Category>(),
                eventDispatcher,
                new NoSnapshotProvider(),
                new EmptySnapshotStore()
                );

            PriceFactory = new PriceFactory("CZK");
            DomainFacade = new DefaultDomainFacade(
                OutcomeRepository,
                CategoryRepository,
                PriceFactory
                );
        }
示例#7
0
        private KeyValuePair <long, long> CompositeTypeFormatter(int count)
        {
            Converts.Repository
            .AddJsonEnumSearchHandler()
            .AddJsonPrimitivesSearchHandler()
            .AddJsonObjectSearchHandler();

            ICompositeTypeProvider provider = new ReflectionCompositeTypeProvider(new ReflectionCompositeDelegateFactory());
            CompositeType          compositeType;

            provider.TryGet(typeof(UserModel), out compositeType);

            CompositeTypeFormatter formatter = new CompositeTypeFormatter(provider, new DefaultFactory <JsonCompositeStorage>());
            Stopwatch sw       = new Stopwatch();
            Stopwatch streamSw = new Stopwatch();

            sw.Start();
            for (int i = 0; i < count; i++)
            {
                UserModel model = new UserModel(1, "UserName", "Password");
                using (MemoryStream stream = new MemoryStream())
                {
                    Task <bool> isSerializedTask = formatter.TrySerializeAsync(model, new DefaultSerializerContext(typeof(UserModel), stream));
                    isSerializedTask.Wait();

                    streamSw.Start();
                    stream.Seek(0, SeekOrigin.Begin);

                    string json = null;
                    using (StreamReader reader = new StreamReader(stream, Encoding.UTF8, true, 1024, true))
                        json = reader.ReadToEnd();

                    stream.Seek(0, SeekOrigin.Begin);
                    streamSw.Stop();

                    IDeserializerContext context            = new DefaultDeserializerContext(typeof(UserModel));
                    Task <bool>          isDeserializedTask = formatter.TryDeserializeAsync(stream, context);
                    isDeserializedTask.Wait();

                    model = (UserModel)context.Output;
                }
            }
            sw.Stop();
            return(new KeyValuePair <long, long>(sw.ElapsedMilliseconds, streamSw.ElapsedMilliseconds));
        }
        public void Reflection_SingleModel()
        {
            ReflectionCompositeTypeProvider provider = new ReflectionCompositeTypeProvider(new ReflectionCompositeDelegateFactory(), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
            CompositeType compositeType;

            Assert.AreEqual(true, provider.TryGet(typeof(SingleModel), out compositeType));

            Assert.AreEqual(typeof(SingleModel), compositeType.Type);
            Assert.AreEqual(1, compositeType.Versions.Count());

            IEnumerator <CompositeVersion> versionEnumerator = compositeType.Versions.GetEnumerator();

            Assert.AreEqual(true, versionEnumerator.MoveNext());
            CompositeVersion version = versionEnumerator.Current;

            Assert.AreEqual(1, version.Version);
            Assert.AreEqual(1, version.Properties.Count());
        }
        public void Reflection_TwoVersionWithFirstImplied()
        {
            ReflectionCompositeTypeProvider provider = new ReflectionCompositeTypeProvider(new ReflectionCompositeDelegateFactory());
            CompositeType compositeType;

            Assert.AreEqual(true, provider.TryGet(typeof(TwoVersionWithFirstImplied), out compositeType));

            Assert.AreEqual(typeof(TwoVersionWithFirstImplied), compositeType.Type);
            Assert.AreEqual(2, compositeType.Versions.Count());

            IEnumerator <CompositeVersion> versionEnumerator = compositeType.Versions.GetEnumerator();

            Assert.AreEqual(true, versionEnumerator.MoveNext());
            CompositeVersion version = versionEnumerator.Current;

            Assert.AreEqual(1, version.Version);
            Assert.AreEqual(1, version.Properties.Count());

            Assert.AreEqual(true, versionEnumerator.MoveNext());
            version = versionEnumerator.Current;
            Assert.AreEqual(2, version.Version);
            Assert.AreEqual(2, version.Properties.Count());
        }