首先介绍一下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 { .... }