IsValid() public method

返回快照的基本数据有效性
public IsValid ( ) : bool
return bool
Ejemplo n.º 1
0
        public virtual AggregateRoot RestoreFromSnapshot(Snapshot snapshot)
        {
            if (snapshot == null || !snapshot.IsValid())
            {
                return(null);
            }

            var aggregateRoot = _aggregateRootFactory.CreateAggregateRoot(snapshot.AggregateRootType);

            if (!IsSnapshotable(aggregateRoot))
            {
                throw new InvalidOperationException(string.Format("聚合根({0})没有实现ISnapshotable接口或者实现了多余1个的ISnapshotable接口,不能将其从某个快照还原。", aggregateRoot.GetType().FullName));
            }

            if (GetSnapshotDataType(aggregateRoot) != snapshot.Data.GetType())
            {
                throw new InvalidOperationException(string.Format("当前聚合根的快照类型({0})与要还原的快照类型({1})不符", GetSnapshotDataType(aggregateRoot), snapshot.Data.GetType()));
            }

            aggregateRoot.InitializeFromSnapshot(snapshot);

            SnapshotterHelper.RestoreFromSnapshot(snapshot.Data, aggregateRoot);

            return(aggregateRoot);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 从给定的快照还原聚合根
        /// </summary>
        public virtual AggregateRoot RestoreFromSnapshot(Snapshot snapshot)
        {
            if (snapshot == null || !snapshot.IsValid())
            {
                return(null);
            }

            AggregateRoot aggregateRoot = _aggregateRootFactory.CreateAggregateRoot(snapshot.AggregateRootType);

            if (!IsSnapshotable(aggregateRoot))
            {
                throw new InvalidOperationException(string.Format("聚合根({0})没有实现ISnapshotable接口或者实现了多余1个的ISnapshotable接口,不能将其从某个快照还原。", aggregateRoot.GetType().FullName));
            }

            if (GetSnapshotType(aggregateRoot) != snapshot.Data.GetType())
            {
                throw new InvalidOperationException(string.Format("当前聚合根的快照类型({0})与要还原的快照类型({1})不符", GetSnapshotType(aggregateRoot), snapshot.Data.GetType()));
            }

            aggregateRoot.InitializeFromSnapshot(snapshot);

            var internalSnapshotterType = typeof(InternalSnapshotter <>).MakeGenericType(snapshot.Data.GetType());

            internalSnapshotterType.GetMethod("RestoreFromSnapshot").Invoke(Activator.CreateInstance(internalSnapshotterType), new object[] { aggregateRoot, snapshot.Data });

            return(aggregateRoot);
        }