其他分享
首页 > 其他分享> > JD-Matrix

JD-Matrix

作者:互联网

首先介绍一下JD-matrix:通过对matrix框架的架构了解,发现JD的matrix是对DDD领域驱动设计理念的一种具体实现。
matrix框架中包含有一下注解:

@APP
@prodect
@Domain
@DomainService
@DomianAbility
@DomainAbilityExtension
@Extension

  

@APP

@APP表示垂直业务身份
内容包含

/**
 * 业务身份定义类
 * code        业务身份code
 * name        业务身份名称
 * priority    优先级,数值越大优先级约高
 * parserClass 业务身份解析类
 */
@App(code = BizApp.CODE,
        name = "XXX",
        priority = 300,
        version = "1.0.0",
        parserClass = BizAppCodeParser.class)
public class BizApp extends BaseApp {

    public static final String CODE="XXX";
}

  

@product

@Product表示水平业务身份

/**
 * 业务身份定义类
 * code        业务身份code
 * name        业务身份名称
**/
@Product(code = ProductAProduct.CODE, name = "水平业务身份A")
public class ProductAProduct extends BaseProduct {
    public static final String CODE = "productA";

    /**
     * 判断水平业务身份是否被击中 返回true则为击中
     */
    @Override
    public boolean isEffect(DomainModel domainModel) {
        return true;
    }

    /**
     * 返回禁止掉的水平业务身份code集合
     */
    @Override
    public Collection<String> getDisabledExtCodes() {
        return null;
    }
}

  

@Domain 业务领域

 
@Domain(code = UseDomain.CODE, name = "用户")
public class UseDomain {

    public static final String CODE="TRADE.cart.user";

}

  

@DomainService 领域服务

 
public interface GetUserDiscountService  extends IDomainService {
    String ITEM_SERVICE_SAVING_ORDER = "DOMAIN_SERVICE_GETDISCOUNT";

    @DomainService(
            parent = UseDomain.CODE,
            code = ITEM_SERVICE_SAVING_ORDER,
            name = "XXX"
    )
    public Double getDiscount(OrderModel order);
}

  

@DomainAbility 领域能力

/**
 * CheckSubmitOrderAbility简介
 * 能力类
 * 需要@DomainAbility注解 parent 为领域code
 * 需要继承BaseDomainAbility类 第一个泛型orderModel用于判断业务身份,垂直业务身份,水平业务身份是否击中的入参参考
 * com.jd.migration.matrx2.fresh7.ext.BizAppCodeParser类的三个方法 。第二个泛型为能力要调用的拓展点方法。
 */
@DomainAbility(name = "XXX", parent = TesthjzDomain.CODE)
public class CheckSubmitOrderAbility extends BaseDomainAbility<OrderModel, CheckSubmitOrderExt> {
    ....
}

  

@DomainAbilityExtension 扩展点定义

public interface GetUserDiscountExt  extends IDomainAbilityExtension {

    String EXT_CHECK_CODE="EXT_TRADE_CART_USE_GetUserDiscountExt_getDiscount";

    @DomainAbilityExtension(
            code = EXT_CHECK_CODE,
            name = "XXX"
    )
    public ResponseResult getDiscount(OrderModel order);
}

  

@Extension 扩展点实现

 
@Extension(code = BrandFlashApp.CODE,scenario = "nike" ,index = 1)
public class BrandFlashGetUserDiscountExtImpl implements GetUserDiscountExt {
   ....
}

  

 

 

 

 

标签:code,Matrix,业务,CODE,JD,public,身份,name
来源: https://www.cnblogs.com/q1359720840/p/16196954.html