业务领域建模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的主要内容,如果未能解决你的问题,请参考以下文章