项目介绍

获取指定的数据源内容,通过相关规则进行数据提取,再写入数据库中。

战略设计

领域划分

子域划分(下载领域)

  • 核心子域(下载)

    获取对应数据源的内容为当前领域的目标
  • 通用领域(代理)

    代理服务不仅可以给当前领域用,也可以对外提供服务给他人用
  • 支撑子域(过滤、校验)

    辅助获取内容功能
聚合划分(下载领域)

  • 由httpEntity(http网页内容下载)、HttpCommandValObj(下载规则)、FilterEntity(过滤规则)、ProxyEntity(代理)、HttpCheckEntity(http内容校验)组合成http下载的聚合, 整个实体方法调用流程编排,由HttpAggregate统一处理,对外提供领域服务即可。
  • 聚合和子域是从两个角度来划分领域,子域是垂直划分、聚合是水平(流程调用)划分。
  • 实体是有状态的,他们靠id来保证唯一,由值对象进行属性描述,他们对外提供的方法可以改变自身内容。值对象是无状态的,靠属性保证唯一,他们是不可变的,对外提供方法只是数据加工提取,可以通过新建值对象来替换原来对象达到改变他们自身内容的效果。

战略设计

代码结构
interfaces # 接口层
    http    # http接口
        assembler    # 转换器 dto -> do
        dto    
        controller
    mq
        ...

application # 应用层
    service # 向上供接口层调用,参数为do, 向下封装领域服务
    
domain    # 领域层
    entity    # 实体
    valobj    # 值对象
    factory    # 创建实体的工厂
    service    # 领域服务
    
infrastructure # 基础层
    config    # 配置代码
    util    # 通用工具

数据传输过程

  • 客户端与接口层交互,他们通过dto进行数据传输
  • 接口层通过适配器将dto转成do,传输给应用层
  • 应用层接收do,这里我认为应用层应该以某一领域为主,或者以流程中第一个领域为主,所以他接收的参数就可以是主领域的value object,领域间的value object转换,可以在应用层添加相关适配器, 适配器推荐使用 MapStruct
  • 领域层通过领域服务与应用层交互,他们之间传输的是value object

黑六
1 声望0 粉丝