`

规格模式(Specification)

阅读更多

我们公司大量的设计都体现了规格模式,设计出来的只是规格,然后再去实例化。业务规则不适于放在任何已个实体或值对象中,而且规则的变化和组合会掩盖那些领域对象的基本含义。有时经常造成组合爆炸。规格是模型的一部分,将它们从实体或值对象中独立出来有助于使模型更加清晰,它表达的是业务的规则。规格是值对象,它用来判断对象 是否满足标准的谓词。

 

商品依赖关系就是一种规格,在它下面可以存在各种各样的关系,例如现在展现的主副机,例如基本包与增值等等。

/**
 * 商品的依赖关系
 * 例如基本收视副机依赖基本收视商品
 */
public abstract class ProductOfferingRelationship extends DomainObject{
	/**
	 * 例如:基本收视副机
	 */
	private ProductOffering productOffering;

	/**
	 * 例如:基本收视
	 */
	public ProductOffering relationshipProductOffering;
	
	protected ProductOfferingRelationship() {
		super();
	}

	public ProductOfferingRelationship(ProductOffering productOffering,
			ProductOffering relationshipProductOffering) {
		super(productOffering.getName());
		this.productOffering = productOffering;
		this.relationshipProductOffering = relationshipProductOffering;
	}

	public ProductOffering getProductOffering() {
		return productOffering;
	}

	public void setProductOffering(ProductOffering productOffering) {
		this.productOffering = productOffering;
	}

	public ProductOffering getRelationshipProductOffering() {
		return relationshipProductOffering;
	}

	public void setRelationshipProductOffering(
			ProductOffering relationshipProductOffering) {
		this.relationshipProductOffering = relationshipProductOffering;
	}

	private static IProductOfferingRelationshipFinder productOfferingRelationshipFinder;

    public static IProductOfferingRelationshipFinder getProductOfferingRelationshipFinder() {
        return productOfferingRelationshipFinder;
    }

    public static void setProductOfferingRelationshipFinder(
            IProductOfferingRelationshipFinder productOfferingRelationshipFinder) {
        ProductOfferingRelationship.productOfferingRelationshipFinder = productOfferingRelationshipFinder;
    }
}

 

这就是定义在规格下的一种具体关系。

/**
 * 主副机关系
 */
public class MasterSlaveProductOfferingRelationship extends
        ProductOfferingRelationship {

    private int maxSlaveCount;
    
    protected MasterSlaveProductOfferingRelationship() {
        
    }

    public MasterSlaveProductOfferingRelationship(ProductOffering productOffering,
            ProductOffering relationshipProductOffering,
            int maxSlaveCount) {
        super(productOffering, relationshipProductOffering);
        setMaxSlaveCount(maxSlaveCount);
    }
    
    public ProductOffering getMaster(){
    	return this.getRelationshipProductOffering();
    }
    
    public ProductOffering getSlave(){
    	return this.getProductOffering();
    }
    
    public int getMaxSlaveCount() {
        return this.maxSlaveCount;
    }
    
    public void setMaxSlaveCount(int maxRelationCount) {
        this.maxSlaveCount = maxRelationCount;
    }

    public static boolean isSlaveToMaster(Product product, Product masterProduct) {
        return getPurchaseAgreementProductFinder().findSlaves(masterProduct).contains(product); 
    }

    public static boolean isSlave(Product product) {
        IProductOfferingRelationshipFinder finder = getProductOfferingRelationshipFinder();
    
        ProductOffering productOffering = product.getProductOffering();
    
        List<MasterSlaveProductOfferingRelationship> relationships = finder.findBy(productOffering, MasterSlaveProductOfferingRelationship.class);
        
		return relationships.size() > 0;
    }

    public static boolean isMaster(Product product) {
        IProductOfferingRelationshipFinder finder = getProductOfferingRelationshipFinder();
    
        ProductOffering productOffering = product.getProductOffering();
    
        return finder.findByRelationshipProductOffering(productOffering, MasterSlaveProductOfferingRelationship.class).size() > 0;
    }
}

 

这才是实例化,只是放入规格。

/**
 * 产品在商品层面上的依赖关系的实例化
 */
public class ProductRelationshipFromProductOffering extends ProductRelationship {

	private ProductOfferingRelationship productOfferingRelationship;
	private static IProductRelationshipFromProductOfferingFinder productRelationshipFromProductOfferingFinder;
	
	protected ProductRelationshipFromProductOffering() {
		super();
	}

	public ProductRelationshipFromProductOffering(Product product,
            Product relationshipProduct) {
       this(product, relationshipProduct, 
           getProductOfferingRelationshipFinder().findBy(product.getProductOffering(), relationshipProduct.getProductOffering()));
    }

	public ProductRelationshipFromProductOffering(Product product,
			Product relationshipProduct,
			ProductOfferingRelationship productOfferingRelationship) {
	    super(product,relationshipProduct);
	    setProductOfferingRelationship(productOfferingRelationship);
	}

	public ProductOfferingRelationship getProductOfferingRelationship() {
        return this.productOfferingRelationship;
    }

    private void setProductOfferingRelationship(
            ProductOfferingRelationship productOfferingRelationship) {
        assert productOfferingRelationship != null : "productOfferingRelationship is null";
        this.productOfferingRelationship = productOfferingRelationship;
    }

	public static IProductRelationshipFromProductOfferingFinder getProductRelationshipFromProductOfferingFinder() {
		return productRelationshipFromProductOfferingFinder;
	}

	public static void setProductRelationshipFromProductOfferingFinder(
			IProductRelationshipFromProductOfferingFinder productRelationshipFromProductOfferingFinder) {
		ProductRelationshipFromProductOffering.productRelationshipFromProductOfferingFinder = productRelationshipFromProductOfferingFinder;
	}
}
分享到:
评论

相关推荐

    specification 规格模式

    规格模式(Specification Pattern),是由Eric Evans和Martin Fowler共同提出的一个设计模式,主要用于封装对象的搜索标准和条件逻辑。该模式的核心思想是分离候选对象的选择声明与对候选对象的匹配过程。 在探讨该...

    利用Specification模式检索缓存数据

    6. `specification`:这个文件可能是Specification模式的基类或抽象类,定义了核心方法,如`and()`、`or()`,用于组合规格,以及`toPredicate()`方法,用于将Specification转换为可执行的查询。 在实际应用中,我们...

    SD卡规格《SD Card Specification》

    本文将根据给定的SD卡规格文档《SD Card Specification》,对SD卡的一些关键特性进行详细介绍。 #### 二、型号介绍 文档中列出了多个型号的SD卡: - **KP032S3CBS** - **KP032S3CCS** - **KP064S3DAS** - **KP128...

    LPDDR5X Specification

    LPDDR5X Specification是JEDEC(Joint Electron Device Engineering Council,固态技术协会)发布的一份技术规范,用于定义低功率双数据速率5(LPDDR5)存储器的技术要求和规格。这份规范是JEDEC组织的标准之一,...

    LPDDR5 (6400M) specification

    LPDDR5(6400M)规格是JEDEC(固态技术协会)制定的一种低功耗双数据速率5代内存标准,旨在提高移动设备和嵌入式系统的内存性能,同时降低能耗。JESD209-5是该标准的具体版本,发布于2019年2月。LPDDR5的引入对现代...

    sd memory specification v3.0 SDXC(Physical_Layer_Specification).pdf

    SD Memory Specification v3.0 – SDXC (Physical Layer Specification) 文件详细介绍了第三代SD卡标准中的物理层规格,这部分文档主要关注于SD卡物理层的设计与实现。SDXC(Secure Digital eXtended Capacity)是在...

    Laravel开发-laravel-specification

    Specification模式的核心思想是将复杂的业务逻辑转换为一系列简单的、可复用的规格(Specification)对象。这些规格对象可以根据需要进行组合,形成更复杂的查询条件。在Laravel中,我们可以使用这一模式来处理数据...

    F035A07-601_Product Specification v0规格书

    电子产品的规格书还会涵盖电气规范(Electrical Specification)、光学规范(Optical Specification)以及可靠性规范(Reliability Specification),这些详细描述了产品的电气性能、光学特性及在不同环境和条件下...

    Accessory Interface Specification R29.pdf

    5.1 USB设备模式与USB主机模式:说明了配件在以USB设备模式运行时如何与设备交互,以及USB主机模式下如何允许配件控制外部设备。 5.2 连接器修改(Connector Modifications)和组装(Assemblies):提供了关于如何...

    NFC Activity Technical Specification 1.1.pdf

    这些内容涵盖了NCI的初始化过程、数据传输模式、射频接口管理、协议层交互等各个方面,旨在为开发者提供一个清晰的框架,以便于设计和实现符合标准的NFC控制器和应用。 文档还包含了一些重要的法律条款,比如许可...

    PCI Express™® Card Electromechanical Specification Revision 2.0

    - **电源管理**:介绍了PCI Express卡的电源管理机制,包括节能模式和电源状态转换的控制策略。 - **机械设计**: - **尺寸与形状**:明确了PCI Express卡的物理尺寸、形状以及厚度等参数,确保其能够在标准的...

    compact flash specification ver 4.1

    - CF 卡的工作模式(如 IDE 模式和 PIO 模式)。 - 数据传输协议和时序。 - 错误检测和纠正机制。 - 安全功能和加密选项。 #### 结论 CompactFlash Specification Ver 4.1 是一个全面的文档,详细规定了 CF 卡...

    SD Specifications Part 1 Physical Layer Specification version 2.00.pdf

    文件标题《SD Specifications Part 1 Physical Layer Specification version 2.00.pdf》指出了这个文件是关于SD卡物理层规格的版本2.00部分1。该规格详细定义了SD卡的物理特征和通讯协议,是驱动工程师在调试SD卡...

    Bluetooth 5.0 Core Specification

    该标签是对文档主题的一个概括性标记,“Sp”可以理解为“Specification”的缩写,即“规格”。这个标签强调了文档的内容重点在于蓝牙的核心规格和技术规范。 ### 核心知识点解析 #### 1. 规范版本与发布时间 - *...

    Accessory Interface Specification R27

    根据《Accessory Interface Specification R27》文档介绍,该规格书主要针对的是苹果产品的配件接口设计规范,尤其是Lightning接口的相关规定。此文档旨在提供一系列技术指导与要求,帮助制造商开发出与苹果设备兼容...

    SGMII Serial-GMII Specification

    - 提高输入和输出共模范围,相应调整输出高低电压,并增加输出过冲/欠冲的规格。 - 添加关于交流耦合和时钟恢复的注释。 - 分析定时预算并减小LVDS输入阈值至±50mV。 - 纳入自动协商过程以更新链路状态。 - 初始...

    mmc specification

    知识点:多媒卡(MultiMediaCard,MMC)规格版本0.9概述 多媒卡(MultiMediaCard,简称MMC)是一种可移动闪存存储设备规格,最初由东芝和SanDisk两家公司共同开发,后来得到了多家技术公司的支持和采纳。MMC规格...

    PCI Express M.2 Specification

    文件"PCI_Express_M.2_Spec_Rev3.0_Ver1.2_06262019_NCB.pdf"很可能是该规范的详细文档,包括了接口的电气规格、机械布局、功能定义、操作流程等内容。通过阅读这份文档,开发者和硬件工程师可以了解到如何设计和...

Global site tag (gtag.js) - Google Analytics