业务领域建模Domain Modeling

Posted lm273

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了业务领域建模Domain Modeling相关的知识,希望对你有一定的参考价值。

一、收集应用领域信息

  我做的题目是海量用户行为实时分析系统的设计与实现。需要设计并实现一个基于流计算的实时计算引擎。目前常用的实时流计算引擎有Flink、Storm等。其主要实现方法是基于事件流,根据用户给定的条件进行实时处理,最后输出用户需要的结果。

二、头脑风暴

  根据需求,我们讨论并整理出了技术架构图。如图1所示。
 
技术图片
  图1 技术架构图
 
  下面对主要的功能模块进行简单的说明: 
  1. InputJunction进行数据的输入。
 
    2.ReceiverJunction将数据转换为内部格式。
 
  3.Context目前改为QueryContext,针对每个Query生成一个处理流程中全局共享的上下文对象。
 
  4.FilterProccessor对输入数据进行过滤,无需存在状态,故放在window前进行处理。
 
  5.WindowProcessor是Window功能的实现主体,具体实现类有TimeWindow、TimeBatchWindow、LengthWindow、LengthBatchWindow。
 
  6.WindowState是存在QueryContext中的Window状态,主要存储过期事件队列(Window数据)。
   
  7.Scheduler实现对过期事件队列的定时调度输出,将过期事件队列发送给后面的处理单元。
 
  8.GroupByOperation和AggregationProcessor的功能是以Event的某一或多个字段为key,根据聚合函数对指定字段进行聚合统计操作。目前的实现的聚合函数为CountExecutor,可根据TimeWindow,按不同key值分别统计在时间窗口内指定字段值的总数,并打印指定的输出字段(包括重命名)。
 
  9.HavingExecutor是对分组后的数据按条件进行过滤
 
  10.OutputJunction实现数据输出和展示
 

三、UML类图

  经过讨论,我们设计出了主要的接口。我们的系统是基于事件流的,所以每个事件需要经过单元进行处理,然后交给下一个单元,直到最后。在这里,我们为所有的单元定义了一个统一的接口Unit。处理单元又可以划分为处理单元(ProcessUnit)和连接单元(JunctionUnit)。处理单元负责对事件进行处理。连接单元只负责将事件传送给其他的单元。此外,在事件的执行过程中,可能需要用到聚合或者时间窗口,这就要求处理引擎能够记录并保存事件的状态,因此我们抽象出了一个State接口,用来保存事件的状态。为了将事件实际的执行者与单元解耦,我们定义了接口Executor,由它来负责事件的具体处理。各个单元只需要根据需要调用Executor即可。

  技术图片


图2 主要的接口

  根据业务的需要,对以上设计的接口进行具体的实现,并定义具体的方法。

 

   Unit:

    getNext()和setNext(),连接各个单元。

  JunctionUnit:

    send()发送事件。

  ProcessUnit:

    process(StreamEvent),接收事件,交给Executor进行处理。

  Executor:

    executor(StreamEvent):事件的实际处理者

 

  

技术图片

图3 具体实现

 

 

 

   

以上是关于业务领域建模Domain Modeling的主要内容,如果未能解决你的问题,请参考以下文章

业务领域建模Domain Modeling

业务领域建模 Domain Modeling

业务领域建模Domain Modeling

业务领域建模Domain Modeling

业务领域建模Domain Modeling

业务领域建模Domain Modeling