当前位置: 首页 > news >正文

博彩网站开发成本怎么创建公司网站

博彩网站开发成本,怎么创建公司网站,免费网站平台,苏州新港建设集团有限公司网站1. 业务背景 作者在工作中主要主导 A 业务线的系统建设,A 业务线主要是零售场景酒水的售卖与即时配送服务。为了方便运营在自研系统中对多平台商品进行管理而开发的三方平台商品管理功能,本次介绍的模版方法模式则是在该功能开发过程中的落地实践。 2.…

1. 业务背景

作者在工作中主要主导 A 业务线的系统建设,A 业务线主要是零售场景酒水的售卖与即时配送服务。为了方便运营在自研系统中对多平台商品进行管理而开发的三方平台商品管理功能,本次介绍的模版方法模式则是在该功能开发过程中的落地实践。

2. 技术方案选型

该业务场景可选设计为三种:

  • 自研系统根据自身业务形态对商品领域进行抽象建模,在自研系统里对商品领域的操作最终映射到三方平台;

  • 自研系统对三方平台商品进行抽象建模,保存三方平台商品在某个时刻的快照,所有操作均是对快照的操作,进而最终映射到三方平台;

  • 自研系统充当一个适配器和转发层,所有对商品的操作都直接映射到三方平台;

从系统建设角度来说最好的选择是第一种,但是对于一个业务方想要更快的提升运营效率来说,更好的选择是第二种和第三种,我们从自身业务情况、性能、后续向第一种方案演进的角度选择了第二种方案。

3. 模版方法应用

以下代码仅为演示对模版方法的应用和展示代码设计思路,有部分方法并未实现,但通过注释说明方法内做了什么操作。

3.1. 模版抽象类

@Component
public abstract class ThirdPlatformStoreGoodsOperations {/*** 商品上架* @param storeGoodsShelvesParam 商品上架参数* @return 新商品记录ID*/public Long shelves(StoreGoodsShelvesParam storeGoodsShelvesParam) {// 获取门店本地商品ThirdPlatformGoods localStoreGoods = this.getLocalStoreGoods(storeGoodsShelvesParam.getId());if (localStoreGoods == null) {throw new HistoricalDataException("商品数据已更新,请刷新当前页面");}// 上架三方平台门店商品this.shelvesThirdPlatformStoreGoods(localStoreGoods);// 刷新本地商品StoreGoodsRefreshParam storeGoodsRefreshParam = new StoreGoodsRefreshParam();BeanUtils.copyProperties(storeGoodsShelvesParam, storeGoodsRefreshParam);return this.refreshOne(storeGoodsRefreshParam);}/*** 商品下架* @param storeGoodsWithdrawParam 商品下架参数* @return 新商品记录ID*/public Long withdraw(StoreGoodsWithdrawParam storeGoodsWithdrawParam) {// 获取门店本地商品ThirdPlatformGoods localStoreGoods = this.getLocalStoreGoods(storeGoodsWithdrawParam.getId());if (localStoreGoods == null) {throw new HistoricalDataException("商品数据已更新,请刷新当前页面");}// 下架三方平台门店商品this.withdrawThirdPlatformStoreGoods(localStoreGoods);// 刷新本地商品StoreGoodsRefreshParam storeGoodsRefreshParam = new StoreGoodsRefreshParam();BeanUtils.copyProperties(storeGoodsWithdrawParam, storeGoodsRefreshParam);return this.refreshOne(storeGoodsRefreshParam);}/*** 增加商品库存* @param storeGoodsIncreaseStockParam 增加商品库存参数* @return 新商品记录ID*/public Long increaseStock(StoreGoodsIncreaseStockParam storeGoodsIncreaseStockParam) {// 获取门店本地商品ThirdPlatformGoods localStoreGoods = this.getLocalStoreGoods(storeGoodsIncreaseStockParam.getId());if (localStoreGoods == null) {throw new HistoricalDataException("商品数据已更新,请刷新当前页面");}// 增加三方平台店铺商品库存this.increaseThirdPlatformStoreGoodsStock(storeGoodsIncreaseStockParam, localStoreGoods);// 刷新本地商品StoreGoodsRefreshParam storeGoodsRefreshParam = new StoreGoodsRefreshParam();BeanUtils.copyProperties(storeGoodsIncreaseStockParam, storeGoodsRefreshParam);return this.refreshOne(storeGoodsRefreshParam);}/*** 增加商品库存* @param storeGoodsDecreaseStockParam 减少商品库存参数* @return 新商品记录ID*/public Long decreaseStock(StoreGoodsDecreaseStockParam storeGoodsDecreaseStockParam) {// 获取门店本地商品ThirdPlatformGoods localStoreGoods = this.getLocalStoreGoods(storeGoodsDecreaseStockParam.getId());if (localStoreGoods == null) {throw new HistoricalDataException("商品数据已更新,请刷新当前页面");}// 减少三方平台店铺商品库存this.decreaseThirdPlatformStoreGoodsStock(storeGoodsDecreaseStockParam, localStoreGoods);// 刷新本地商品StoreGoodsRefreshParam storeGoodsRefreshParam = new StoreGoodsRefreshParam();BeanUtils.copyProperties(storeGoodsDecreaseStockParam, storeGoodsRefreshParam);return this.refreshOne(storeGoodsRefreshParam);}/*** 刷新店铺单个商品* @param storeGoodsRefreshParam 刷新店铺单个商品参数* @return 新商品记录ID*/public Long refreshOne(StoreGoodsRefreshParam storeGoodsRefreshParam) {// 获取门店本地商品ThirdPlatformGoods localStoreGoods = this.getLocalStoreGoods(storeGoodsRefreshParam.getId());if (localStoreGoods == null) {throw new HistoricalDataException("商品数据已更新,请刷新当前页面");}// 获取三方门店商品StoreGoodsInfoResult storeGoodsInfoResult = this.getThirdPlatformStoreGoods(storeGoodsRefreshParam, localStoreGoods);// 刷新本地商品return this.refreshLocalStoreGoods(storeGoodsRefreshParam, storeGoodsInfoResult);}/*** 刷新店铺商品* @param storeGoodsRefreshParam 刷新店铺单个商品参数* @param storeGoodsInfoResult 三方门店商品*/private Long refreshLocalStoreGoods(StoreGoodsRefreshParam storeGoodsRefreshParam,StoreGoodsInfoResult storeGoodsInfoResult) {// 更新本地商品}/*** 获取本地店铺商品信息* @param localStoreGoodsId 本地商品ID* @return 本地店铺商品信息*/private ThirdPlatformGoods getLocalStoreGoods(Long localStoreGoodsId) {// 获取本地商品}/*** 上架三方店铺商品* @param localStoreGoods 本地店铺商品信息*/protected abstract void shelvesThirdPlatformStoreGoods(ThirdPlatformGoods localStoreGoods);/*** 下架三方店铺商品* @param localStoreGoods 本地店铺商品信息*/protected abstract void withdrawThirdPlatformStoreGoods(ThirdPlatformGoods localStoreGoods);/*** 获取三方平台店铺商品* @param storeGoodsRefreshParam 刷新店铺单个商品参数* @param localStoreGoods 本地商品* @return 三方门店商品*/protected abstract StoreGoodsInfoResult getThirdPlatformStoreGoods(StoreGoodsRefreshParam storeGoodsRefreshParam,ThirdPlatformGoods localStoreGoods);/*** 增加三方平台店铺商品库存* @param storeGoodsIncreaseStockParam 增加三方平台店铺商品库存参数* @param localStoreGoods 本地店铺商品信息*/protected abstract void increaseThirdPlatformStoreGoodsStock(StoreGoodsIncreaseStockParam storeGoodsIncreaseStockParam,ThirdPlatformGoods localStoreGoods);/*** 减少三方平台店铺商品库存* @param storeGoodsDecreaseStockParam 减少三方平台店铺商品库存参数* @param localStoreGoods 本地店铺商品信息*/protected abstract void decreaseThirdPlatformStoreGoodsStock(StoreGoodsDecreaseStockParam storeGoodsDecreaseStockParam,ThirdPlatformGoods localStoreGoods);/*** 获取对应平台* @return 平台枚举*/protected abstract ThirdPlatformEnums getPlatform();
}

3.2. 模版实现类

public class ELEStoreGoodsTemplate extends ThirdPlatformStoreGoodsOperations {@Overrideprotected void shelvesThirdPlatformStoreGoods(ThirdPlatformGoods localStoreGoods) {// 饿了么平台商品上架}@Overrideprotected void withdrawThirdPlatformStoreGoods(ThirdPlatformGoods localStoreGoods) {// 饿了么平台商品下架}@Overrideprotected StoreGoodsInfoResult getThirdPlatformStoreGoods(StoreGoodsRefreshParam storeGoodsRefreshParam,ThirdPlatformGoods localStoreGoods) {// 获取饿了么平台商品信息return null;}@Overrideprotected void increaseThirdPlatformStoreGoodsStock(StoreGoodsIncreaseStockParam storeGoodsIncreaseStockParam,ThirdPlatformGoods localStoreGoods) {// 增加饿了么平台商品库存}@Overrideprotected void decreaseThirdPlatformStoreGoodsStock(StoreGoodsDecreaseStockParam storeGoodsDecreaseStockParam, ThirdPlatformGoods localStoreGoods) {// 减少饿了么平台商品库存}@Overrideprotected ThirdPlatformEnums getPlatform() {return ThirdPlatformEnums.ELEMO;}
}

4. 与 Spring 结合管理模版实现类

4.1. 基于 Spring IoC 容器依赖查找管理模版

@Component
public class ThirdPlatformGoodsTemplateManage {public Map<ThirdPlatformEnums, ThirdPlatformStoreGoodsOperations> templateMap = new HashMap<>(5);public ThirdPlatformGoodsTemplateManage(ListableBeanFactory listableBeanFactory){ObjectProvider<ThirdPlatformStoreGoodsOperations> beanProvider = listableBeanFactory.getBeanProvider(ThirdPlatformStoreGoodsOperations.class);for (ThirdPlatformStoreGoodsOperations template : beanProvider) {templateMap.put(template.getPlatform(), template);}}public ThirdPlatformStoreGoodsOperations getTemplate(ThirdPlatformEnums thirdPlatformEnum) {ThirdPlatformStoreGoodsOperations thirdPlatformStoreGoodsOperations = templateMap.get(thirdPlatformEnum);Assert.notNull(thirdPlatformStoreGoodsOperations, String.format("%s平台模版未找到!", thirdPlatformEnum.getDesc()));return thirdPlatformStoreGoodsOperations;}public ThirdPlatformStoreGoodsOperations getTemplate(String platformCode) {ThirdPlatformEnums thirdPlatformEnum = ThirdPlatformEnums.getInstanceByCode(platformCode);ThirdPlatformStoreGoodsOperations thirdPlatformStoreGoodsOperations = templateMap.get(thirdPlatformEnum);Assert.notNull(thirdPlatformStoreGoodsOperations, String.format("%s平台模版未找到!", platformCode));return thirdPlatformStoreGoodsOperations;}
}

4.2. 基于 BeanPostProcessor + 注解方式管理模版

@Component
public class ThirdPlatformStoreGoodsOperationsInitialization implements BeanPostProcessor {@Resourceprivate ThirdPlatformGoodsTemplateManage thirdPlatformGoodsTemplateManage;@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof ThirdPlatformStoreGoodsOperations && bean.getClass().isAnnotationPresent(ThirdPlatformStoreGoodsOperationsTemplate.class)){ThirdPlatformStoreGoodsOperations thirdPlatformStoreGoodsOperations = (ThirdPlatformStoreGoodsOperations) bean;thirdPlatformGoodsTemplateManage.templateMap.put(thirdPlatformStoreGoodsOperations.getPlatform(), thirdPlatformStoreGoodsOperations);}return bean;}
}

改进建议: 模版CODE可通过注解属性获取

5. 为什么选择模版方法

看完代码实现再回过头来,说说选择模版方法的原因:

  • 从功能角度来说对三方平台商品管理无非就是那么几个商品新增、商品编辑、商品库存调整、商品上下架等;
  • 从商品领域建模对三方平台商品领域行为抽象可分为:创建、修改、增加库存、减少库存、覆盖库存、上架、下架等;
  • 从代码复用的角度来说不同平台商品的操作不同的只有最终调用三方平台的差异上,其他代码都可复用,假设第一次开发只先适配美团,那么在美团适配后复用的代码理论上不需要做任何修改;
  • 从代码可扩展角度来说,如果增加其他平台,仅需要继承模版抽象类,实现抽象方法即可;
  • 从关注点分离角度来说后续适配其他平台仅仅需要关注如何操作三方平台即可,这对新人或者不了解的人来继续迭代有很大好处,关注点集中在如何适配三方平台上;
http://www.shuangfujiaoyu.com/news/32343.html

相关文章:

  • 雷锋书签制作图片seo有哪些作用
  • 武汉市哪里做公司企业网站优秀软文范例800字
  • 网站登录慢东莞seo外包公司哪家好
  • 开利网络企业网站建设第一品牌怎么优化关键词
  • 河南省电力工程建设企业协会网站怎么推广一个网站
  • 发生太多重定位wordpress深圳网站建设专业乐云seo
  • 东莞粤保保安公司长沙百度快速优化排名
  • 武义住房和城乡建设局网站广告平台网
  • 学会网站建设目的兰州做网站的公司
  • 大型网站开发模型网游推广员
  • 做最漂亮的网站免费推广方式都有哪些
  • 织梦英文网站模板广州seo公司如何
  • 国家疫情防控最新政策解读搜索引擎排名优化seo课后题
  • 如何低成本做网站推广上海网络排名优化
  • 做新闻网站如何关键词什么意思
  • 湖南专业外贸建站公司网站排名优化培训
  • 有模板做ppt的网站有哪些西安做网页的公司
  • 一建报考专业seo搜索优化是什么呢
  • 网站的字体优化大师app下载
  • 公司做二手网站的用意seo关键词排名教程
  • 小程序网站制作公司厦门人才网官网招聘
  • 赌博网站游戏怎么做链接买卖
  • 扬中网站建设南宁seo教程
  • 网站建设评价国外免费网站域名服务器查询
  • 北京软件外包公司排名在线排名优化
  • 自适应网站建站价格网站如何被百度快速收录
  • 国外网站怎么做推广谷歌关键词查询工具
  • 山东网站策划怎么做网络推广的常用方法
  • 做网站需要看的书友情链接英文翻译
  • 高古楼网站找活做百度 营销推广怎么做