美文网首页程序员
领域驱动设计

领域驱动设计

作者: 黄大海 | 来源:发表于2021-01-27 15:25 被阅读0次

    存储过程 vs 表视图 vs 领域驱动

    organizing-domain-logic-patterns-l.jpg
    • 存储过程
      • 面向集合
      • sql/存储过程编辑表
      • 指数级复杂度
    • 表视图
      • 面向过程
      • 代码编辑表
      • 指数级复杂度
    • 领域驱动
      • 面向对象
      • 代码编辑领域模型
      • 领域模型同步到表
      • 线性复杂度

    六边形架构(以领域模型为核心)

    db_vs_domain.png
    • 领域模型外都是适配层(包括数据库)


      100-explicit-architecture-svg.png

    VO-BO-DO 是领域驱动的实现方式,其中BO是核心领域模型,VO和DO都是适配

    聚合根/实体/值对象

    OrderBO(聚合根)

    • orderId(值)
    • BaseInfo(值对象)
      • orderStatus(值)
      • orderTime(值)
    • TradeInfo(实体)
      • payId(值)
      • amount(值)
      • payStatus(值)
    • LocationInfo(值对象)
      • country(值)
      • address(值)
      • district(值)
    • OrderGoods(实体)
      • orderGoodsId(值)
      • GoodsAttribute[] (值对象)
        • size(值)
        • style(值)
      • sku (值)

    ============================
    OrderDO

    • orderId
    • orderStatus
    • orderTime
    • country
    • address
    • district

    TradeDO

    • payId
    • amount
    • payStatus

    OrderGoodsDO

    • orderGoodsId
    • goodsAttributes(json)
    • sku

    ============================
    OrderVO

    • orderId
    • orderStatusDiscription(orderStatus的说明)
    • orderTimeFormat(yyyy-MM-dd HH:mm:ss)
    • amountWithUnit(把钱转为国家对应的货币单位和分割方式)
    • payStatusDiscription
    • location(country + address + district)
    • goodsAttrWithLanguage[] (经过翻译以后的GoodsAttribute)
    • sku

    如何设计领域服务(用例法,读写分离)

    • OrderService(领域服务)

      • submit(OrderBO)
      • confirm(orderId)
      • cancel(orderId)
      • pay(orderId, amount)
      • changeGoods(orderId, goodsInfo)
      • changeLocation(LocationInfo newlocation)
    • OrderQueryService(复杂查询,或者直接调用DAO)

      • queryPageByConditions(conditions)
      • specialReport(conditions)

    相关文章

      网友评论

        本文标题:领域驱动设计

        本文链接:https://www.haomeiwen.com/subject/avdazktx.html