插件开发技术说明(16)---消除代码冗余
来源:互联网 发布:手机所有交友软件 编辑:程序博客网 时间:2024/05/16 18:36
1.问题场景
代码冗余是程序结构性问题.
其最大的缺陷是程序的维护成本(包括代码修改,调试和测试).次要影响之一是编译的可执行文件增大了,占用了运行时内存.
几种单据的促销使用的CPromotion,CSaleDivider在以下模块中都有定义:存在3个极其相似的副本.
---yoopo_data.h初始定义,对应COrder
---sd:sd_data.h (对应CSale)
---mpm:mpm_data.h(对应CPurchase)
首先需要澄清的是,初始定义时我并未意识到后来多种单据都存在促销的情况,对后期需求没有进一步了解.否则不会是当初的设计.
促销极可能是未来存在变数的一个领域.
任何调整都涉及到上述3个模块的同步调整.
促销相关的概念:
.促销方案:对应促销单(CPromotion)
.促销策略:CPromotion::CPromotionOrderItemMgr内置
.可促销单据:引入CPromotable,CPromotableDetail类
***促销相关类及分单器移入到新的公共文件common\Promtable文件中.
COrder,CSale,CPurchase都从CPromotable派生.其对应明细都从CPromotableDetail派生
2.实现
Promotable.h文件定义如下:除以下内容外,CPromotion及相关类也移入此文件.
/////////////////////////////////////////////////////////////////////////////< 单据分单器///< 对每一促销方案的明细生成一张单据class COrderDivider {public:map<SLIC_SHEETID,vector<CSheetDetail*>* > details_;bool Find(SLIC_SHEETID sheet_id);void Add(SLIC_SHEETID sheet_id,CSheetDetail* detail);};typedef COrderDivider CSheetDivider; ///< 单据分单器class CPromotion;class CPromotableDetail;/////////////////////////////////////////////////////////////////////////////////< 可促销单据class CPromotable : public CSheet {public:float disc_value_;///< 整单优惠金额float crm_value_; ///< 促销优惠金额public:CPromotable(SLIC_SHEETTYPE sheet_type):CSheet(sheet_type),disc_value_(0),crm_value_(0) {}CPromotable(SLIC_SHEETTYPE sheet_type,SLIC_SHEETID sheet_id):CSheet(sheet_type,sheet_id),disc_value_(0),crm_value_(0) {}virtual CPromotableDetail* NewDetail() = 0;};/////////////////////////////////////////////////////////////////////////////////< 可促销单据明细class CPromotableDetail : public CSheetDetail {public:SLIC_GOODS_ID goods_id_; ///< 商品IDint bulk_qty_; ///< 散装数int pack_qty_; ///< 件装数int pack_unit_qty_; ///< 件包装数float bulk_price_; ///< 散装价float pack_price_; ///< 件装价SLIC_SHEETID promotion_sheetid_; ///< 促销单号float disc_value_; ///< 优惠金额bool gift_flag_; ///< 赠品标识 int gift_qty_; ///< 赠品数量string prefer_notes_;CPromotion *promotion_;public:CPromotableDetail():goods_id_(0),bulk_qty_(0),pack_qty_(0),pack_unit_qty_(1),bulk_price_(0),pack_price_(0),promotion_sheetid_(0),disc_value_(0),gift_flag_(0),gift_qty_(0),promotion_(0) {}};
3.应用调整
COrder调整如下:
class COrder : public CPromotable {public:struct COrderDetail : public CPromotableDetail {public:COrderDetail():CPromotableDetail(),line_num_(1),order_(0){}public:COrder():CPromotable(1050),pay_type_(0),pur_value_(0),pay_value_(0),ret_flag_(0),from_id_(4),source_(0) {}CPromotableDetail* NewDetail() { return new COrderDetail; }};
.从CPromotable派生,构造函数调整
.明细从CPromotableDetail派生,构造函数调整
.实现NewDetail
4.促销实现的局限
促销策略:。条件
。优惠内容:
一个促销策略一种条件,一个优惠内容,如满金额立减。
一个促销策略可应用到不同的促销方案,不同的单据类型
促销方案:
。一个促销方案,目前只支持一种优惠策略.
即不支持以下情形:
A,B,C三个商品,(1)A,B满金额立减,(2)A,C满数量赠品.
这2个策略理论上还存在与和或的组合。这引入了潜在的最优策略问题,如当或关系时,系统如何决定最后方案。
基于此,不能把促销策略复杂化,可以从实用角度简化。如考虑无限可能,则促销策略非脚本化不可。
0 0
- 插件开发技术说明(16)---消除代码冗余
- 消除Java 的冗余代码
- 使用lombok消除冗余代码
- [草稿]消除C代码中的冗余
- 一种消除代码冗余的控制结构
- lombok如何做的冗余代码消除。
- 用表驱动消除冗余代码
- 插件开发技术说明(2)---rc_finder插件
- 插件开发技术说明(3)---letein插件
- 基于移动平台消除冗余GPU绘制片段的技术
- 插件开发技术说明(1)---前言
- 插件开发技术说明(4)---xml编程
- 插件开发技术说明(5)---分页处理
- 插件开发技术说明(11)---修改数据
- 开发环境中实现Lombok消除Java冗余
- 开发环境中实现Lombok消除Java冗余
- 开发环境中实现Lombok消除Java冗余
- 插件开发技术说明(7)---读插件配置
- 析构的问题
- 二叉树层次遍历和深度遍历
- sql 2012 与java连接的类
- 搜狗笔试题
- JAVA基础学习(十六)--集合三-Map、HashMap,TreeMap与常用API
- 插件开发技术说明(16)---消除代码冗余
- ubuntu14.04.2安装jdk-8u60
- JavaScript高级程序设计之引用类型之Array 类型第5.2讲笔记
- 爬虫被封杀解决方法
- C#向指定路径写入文件
- 数据仓库Data Warehousing理解
- HTML表单
- 或||的计算
- 15分钟搞定iOS9 Quick Actions