private void Init() { if (_initialized) { return; } lock (Locker) { if (_initialized) { return; } _acDomain.MessageDispatcher.DispatchMessage(new MemorySetInitingEvent(this)); _viewDicByFunction.Clear(); _viewDicById.Clear(); var views = _acDomain.RetrieveRequiredService <IOriginalHostStateReader>().GetAllUiViews(); foreach (var view in views) { var viewState = UiViewState.Create(_acDomain, view); _viewDicById.Add(view.Id, viewState); FunctionState function; if (!_acDomain.FunctionSet.TryGetFunction(view.Id, out function)) { throw new NotExistException("意外的功能标识" + view.Id); } if (!_viewDicByFunction.ContainsKey(function)) { _viewDicByFunction.Add(function, viewState); } } _initialized = true; _acDomain.MessageDispatcher.DispatchMessage(new MemorySetInitializedEvent(this)); } }
private void Handle(IAcSession acSession, IUiViewUpdateIo input, bool isCommand) { var acDomain = _set._acDomain; var viewRepository = acDomain.RetrieveRequiredService <IRepository <UiView> >(); UiViewState bkState; if (!acDomain.UiViewSet.TryGetUiView(input.Id, out bkState)) { throw new NotExistException(); } UiView entity; var stateChanged = false; lock (Locker) { UiViewState state; if (!acDomain.UiViewSet.TryGetUiView(input.Id, out state)) { throw new NotExistException(); } entity = viewRepository.GetByKey(input.Id); if (entity == null) { throw new NotExistException(); } entity.Update(input); var newState = UiViewState.Create(acDomain, entity); stateChanged = newState != bkState; if (stateChanged) { Update(newState); } if (isCommand) { try { viewRepository.Update(entity); viewRepository.Context.Commit(); } catch { if (stateChanged) { Update(bkState); } viewRepository.Context.Rollback(); throw; } } } if (isCommand && stateChanged) { acDomain.MessageDispatcher.DispatchMessage(new UiViewUpdatedEvent(acSession, entity, input, isPrivate: true)); } }
private void Handle(IAcSession acSession, IUiViewCreateIo input, bool isCommand) { var acDomain = _set._acDomain; var viewDicByFunction = _set._viewDicByFunction; var viewDicById = _set._viewDicById; var viewRepository = acDomain.RetrieveRequiredService <IRepository <UiView> >(); if (!input.Id.HasValue) { throw new ValidationException("标识是必须的"); } UiView entity; lock (Locker) { FunctionState function; if (!acDomain.FunctionSet.TryGetFunction(input.Id.Value, out function)) { throw new ValidationException("意外的功能标识,界面视图首先是个功能。请先添加界面视图对应的功能记录。"); } UiViewState view; if (acDomain.UiViewSet.TryGetUiView(input.Id.Value, out view)) { throw new ValidationException("给定标识的界面视图已经存在"); } entity = UiView.Create(input); var state = UiViewState.Create(acDomain, entity); if (!viewDicById.ContainsKey(state.Id)) { viewDicById.Add(state.Id, state); } if (!viewDicByFunction.ContainsKey(function)) { viewDicByFunction.Add(function, state); } if (isCommand) { try { viewRepository.Add(entity); viewRepository.Context.Commit(); } catch { if (viewDicById.ContainsKey(entity.Id)) { viewDicById.Remove(entity.Id); } if (viewDicByFunction.ContainsKey(function)) { viewDicByFunction.Remove(function); } viewRepository.Context.Rollback(); throw; } } } if (isCommand) { acDomain.MessageDispatcher.DispatchMessage(new UiViewAddedEvent(acSession, entity, input, isPrivate: true)); } }