`
barryzhong
  • 浏览: 21492 次
  • 性别: Icon_minigender_1
社区版块
存档分类

生命周期组件框架:加强版 UML State Machine:关系型复合状态机服务 示例

阅读更多
 

关系生命周期    

   
    @StateMachine
    static interface ContractLifecycle {

        @StateSet
        static interface States {

            @Initial
            @Functions({ @Function(transition = ContractLifecycle.Transitions.Activate.class, value = Active.class),
                    @Function(transition = ContractLifecycle.Transitions.Cancel.class, value = Canceled.class) })
            static interface Draft {}
            @Functions({ @Function(transition = ContractLifecycle.Transitions.Expire.class, value = Expired.class),
                    @Function(transition = ContractLifecycle.Transitions.Cancel.class, value = Canceled.class) })
            static interface Active {}
            @End
            static interface Expired {}
            @End
            static interface Canceled {}
        }
        @TransitionSet
        static interface Transitions {

            static interface Activate {}
            static interface Expire {}
            static interface Cancel {}
        }
    }
    @LifecycleMeta(ContractLifecycle.class)
    public static class Contract extends ReactiveObject {

        public Contract() {
            initialState(ContractLifecycle.States.Draft.class.getSimpleName());
        }

        @Transition
        public void activate() {}

        @Transition
        public void expire() {}

        @Transition
        public void cancel() {}
    }
    // ///////////////////////////////////////////////////////////////////////////////
    // Relational Case 1.
    // ///////////////////////////////////////////////////////////////////////////////
    @StateMachine
    static interface RelationalOrderLifecycleSharingValidWhile {

        @StateSet
        static interface States {

            @Initial
            @Function(transition = Transitions.Start.class, value = Started.class)
            @ValidWhile(on = { ContractLifecycle.States.Active.class }, relation = Relations.Contract.class)
            static interface Created {}
            @CompositeState
            @Function(transition = Transitions.Cancel.class, value = Canceled.class)
            static interface Started {

                @StateSet
                static interface SubStates {

                    @Initial
                    @Function(transition = RelationalOrderLifecycleSharingValidWhile.States.Started.SubTransitions.DoProduce.class, value = Producing.class)
                    @ValidWhile(on = { ContractLifecycle.States.Active.class }, relation = RelationalOrderLifecycleSharingValidWhile.Relations.Contract.class)
                    static interface OrderCreated {}
                    @Function(transition = RelationalOrderLifecycleSharingValidWhile.States.Started.SubTransitions.DoDeliver.class, value = Delivering.class)
                    @ValidWhile(on = { ContractLifecycle.States.Active.class }, relation = RelationalOrderLifecycleSharingValidWhile.Relations.Contract.class)
                    static interface Producing {}
                    @Function(transition = RelationalOrderLifecycleSharingValidWhile.States.Started.SubTransitions.ConfirmComplete.class, value = Done.class)
                    @ValidWhile(on = { ContractLifecycle.States.Active.class }, relation = RelationalOrderLifecycleSharingValidWhile.Relations.Contract.class)
                    static interface Delivering {}
                    @End
                    @ShortCut(RelationalOrderLifecycleSharingValidWhile.States.Finished.class)
                    // Ignoring : @ValidWhile(on = {
                    // ContractLifecycle.States.Active.class }, relation =
                    // Relations.Contract.class)
                    static interface Done {}
                }
                @TransitionSet
                static interface SubTransitions {

                    static interface DoProduce {}
                    static interface DoDeliver {}
                    static interface ConfirmComplete {}
                }
            }
            @End
            static interface Finished {}
            @End
            static interface Canceled {}
        }
        @TransitionSet
        static interface Transitions {

            static interface Start {}
            static interface Cancel {}
        }
        @RelationSet
        static interface Relations {

            @RelateTo(ContractLifecycle.class)
            static interface Contract {}
        }
    }
    @LifecycleMeta(RelationalOrderLifecycleSharingValidWhile.class)
    public static class ProductOrderSharingValidWhile extends ProductBase {

        private Contract contract;

        public ProductOrderSharingValidWhile(Contract contract) {
            this.contract = contract;
            initialState(RelationalOrderLifecycleSharingValidWhile.States.Created.class.getSimpleName());
        }

        @Relation(RelationalOrderLifecycleSharingValidWhile.Relations.Contract.class)
        public Contract getContract() {
            return this.contract;
        }

        @Transition
        public void start() {}

        @Transition
        public void cancel() {}

        @Transition
        public void doProduce() {}

        @Transition
        public void doDeliver() {}

        @Transition
        public void confirmComplete() {}
    }

  

 

  

    @Test
    public void test_relational_composite_state_machine_sharing_with_composite_state() {
        final Contract contract = new Contract();
        // Outer Initial State
        assertState(ContractLifecycle.States.Draft.class, contract);
        contract.activate();
        assertState(ContractLifecycle.States.Active.class, contract);
        final ProductOrderSharingValidWhile product = new ProductOrderSharingValidWhile(contract);
        // Outer State + Outer Transition => Composite State => Composite
        // Initial State
        {
            // Outer Initial State
            assertState(RelationalOrderLifecycleSharingValidWhile.States.Created.class, product);
            // Outer Transition
            product.start();
            assertState(RelationalOrderLifecycleSharingValidWhile.States.Started.SubStates.OrderCreated.class, product);
        }
        {
            // Composite State + Composite Transition => Composite State
            product.doProduce();
            assertState(RelationalOrderLifecycleSharingValidWhile.States.Started.SubStates.Producing.class, product);
            product.doDeliver();
            assertState(RelationalOrderLifecycleSharingValidWhile.States.Started.SubStates.Delivering.class, product);
        }
        {
            // Composite State + Composite Transition => Composite Final State
            // => Outer State
            product.confirmComplete();
            assertState(RelationalOrderLifecycleSharingValidWhile.States.Finished.class, product);
        }
    }

 

 

    @Test(expected = LifecycleException.class)
    public void test_relational_standalone_composite_invalid_state_sharing_from_owning_valid_while() {
        final Contract contract = new Contract();
        assertState(ContractLifecycle.States.Draft.class, contract);
        final ProductOrderSharingValidWhile order = new ProductOrderSharingValidWhile(contract);
        try {
            order.start();
        } catch (LifecycleException e) {
            assertInvalidStateErrorByValidWhile(e, contract, order, ContractLifecycle.States.Active.class);
        }
        contract.activate();
        assertState(ContractLifecycle.States.Active.class, contract);
        order.start();
        assertState(RelationalOrderLifecycleSharingValidWhile.States.Started.SubStates.OrderCreated.class, order);
        contract.cancel();
        assertState(ContractLifecycle.States.Canceled.class, contract);
        try {
            order.doProduce();
        } catch (LifecycleException e) {
            assertInvalidStateErrorByValidWhile(e, contract, order, ContractLifecycle.States.Active.class);
            throw e;
        }
    }

 

前文:生命周期组件框架——关系型状态及服务

分享到:
评论

相关推荐

    [已更新Demo附件]生命周期组件框架——关系型状态机服务

    近期,我深入研究了一个名为“生命周期组件框架——关系型状态机服务”的框架,其旨在简化这一过程,并通过关系型状态机来管理组件的生命周期。接下来,我将详细介绍这个框架的核心概念、源码实现以及其作为工具的...

    Coke Machine State Machine

    状态机是一种重要的软件设计模式,它用于描述对象在其生命周期中可能经历的各种状态以及在不同条件下的状态转换。在这个场景中,"Coke Machine State Machine" 指的是一个自动售货机的状态机模型,用于模拟自动售货...

    how_to_write_state_machine.rar_Verilog machine_verilog 状态机_状态机

    1. **组合逻辑状态机(Combinational State Machine)**:状态转换逻辑完全在组合逻辑中实现,适用于小型、简单状态机。优点是时序路径短,响应速度快;缺点是不易于时序分析和综合优化。 2. **同步寄存器状态机...

    《大象:Thinking in UML》(第2版),learning UML 2.0

    5. **状态图(State Diagrams)**:状态图用于表示一个对象在其生命周期内可能经历的各种状态以及引起状态转移的事件。 6. **活动图(Activity Diagrams)**:活动图类似于流程图,用于表示系统中的业务流程或算法...

    UML解惑:图说UML中的六大关系

    在组合关系中,整体与部分是不可分离的,整体的生命周期结束就意味着部分的生命周期也结束。例如,大脑(Brain类)与人(Human类)之间的关系,没有大脑的人是无法生存的。组合关系在代码中的表现形式与关联和聚合...

    [大象-Thinking.in.UML(第二版)].谭云杰.扫描版-pdf

    状态图(State Diagram)描述对象在其生命周期内的行为变化;活动图(Activity Diagram)用于展现流程和决策;组件图(Component Diagram)和部署图(Deployment Diagram)则关注系统的物理结构。 3. **UML符号和...

    六大UML类图以及关系

    ### UML类图关系详解 #### 一、引言 UML(Unified Modeling Language,统一建模语言)是一种广泛应用于软件工程领域的图形化语言,它帮助开发者理解和设计系统。其中,UML类图是最常用的一种图示方式,用于描述系统...

    框架体系结构的UML档案(PDF)

    在本档案中,作者着重介绍了UML-F,这是一种针对框架的UML扩展,旨在增强UML在描述框架体系结构时的能力。 UML-F元素是UML的一个关键组成部分,它包括了专门用于表示框架的特定概念和符号。这些元素可能包括框架...

    软件开发生命周期与统一建模语言UML》-曹静-电子教案

    在现代软件工程实践中,软件开发生命周期(SDLC)和统一建模语言(UML)是构建高质量软件不可或缺的两个组成部分。SDLC定义了软件从概念到部署的整个过程,而UML则提供了一套标准化的建模工具,以图形化的方式帮助...

    UML笔记3(组件图、配置图)

    5. **生命周期管理**:配置图还可以表示组件的启动、停止、升级等生命周期活动。 ### 三、StartUML工具 StartUML是一款免费的UML建模工具,支持绘制各种UML图表,包括组件图和配置图。它提供了用户友好的界面和...

    State-machine-design-techniques.zip_状态机

    本资料包“State-machine-design-techniques.zip”包含了关于状态机设计的详细英文介绍,特别是如何编写状态机和使用CASE(计算机辅助软件工程)工具进行设计。 状态机可以分为两类:有限状态机(FSM)和Mealy或...

    UML 实验文档 内容较全

    状态图表示一个对象在其生命周期中的各种状态以及事件触发状态转移的方式。它有助于理解对象的行为模式。 **6. 活动图(Activity Diagram)** 活动图是一种流程图,用来描述系统的动态行为,尤其是处理过程中的控制流...

    UML 自动售货机的设计_状态图描述

    UML 自动售货机的设计_状态图描述 UML(Unified Modeling Language)是一种软件设计语言,用于描述软件系统的结构、行为和架构。自动售货机的设计就是使用UML来描述自动售货机的原理和状态转换。 状态图是UML中一...

    UML学习指导及简单示例

    5. **状态图**:状态图描述了一个对象在其生命周期中可能经历的状态及其转换。每个状态代表对象的一个条件,而转换则描述了如何从一个状态过渡到另一个状态。 6. **活动图**:活动图类似于流程图,用于描述系统中的...

    UML设计的9种图例及示例

    状态图用于捕获对象、子系统和系统的生命周期。状态图可以告知一个对象可以拥有的状态,并且事件(如小溪的接收、时间的流逝、错误、条件变为真等)会怎么随着时间的推移来影响这些状态。 6. 顺序图(Sequence ...

    安卓组件化框架

    - 在这个示例中,开发者可能会学习如何定义组件接口,如何在组件之间传递数据,以及如何管理和协调组件的生命周期。 4. **组件化框架的关键元素**: - **组件**:具有独立功能的代码单元,如Activity、Service、...

    软件开发生命周期与统一建模语言UML课件.rar

    《软件开发生命周期与统一建模语言UML详解》 软件开发生命周期(Software Development Life Cycle,SDLC)是软件工程领域中一个重要的概念,它为软件项目的规划、设计、实施、测试和维护等阶段提供了指导框架。SDLC...

    UML期末考试试题

    - **状态机图(State Machine Diagram)**:也称为状态图或状态转换图,展示了对象在其生命周期内的各种状态及这些状态之间的转移。 - **活动图(Activity Diagram)**:用于展示工作流中的活动步骤及控制流,常用于业务...

    组件化开发示例代码

    2. **组件隔离**:每个组件都有自己的独立Gradle项目,通过配置build.gradle文件来控制组件的依赖关系。 3. **实现组件间通信**:利用Android插件和反射技术,实现组件之间的动态加载和调用。例如,使用DexElement...

    android快速开发框架-带示例

    12. **日志工具**:如Logcat的增强版,帮助开发者调试和记录应用行为。 在"ChaoJar-Demo"这个子文件中,你可能找到这些组件的示例代码,包括如何集成、配置和使用。通过研究这些示例,你可以更深入地理解每个组件的...

Global site tag (gtag.js) - Google Analytics