首页 > 编程知识 正文

网易考拉跨境电商模式,重构以人为主的传统制造模式

时间:2023-05-06 16:43:28 阅读:108546 作者:1573

本文由作者喜闻乐见发表在网易云社区。

一.消息中心简要介绍

核心app的消息中心负责收发app站内的消息,包括营销系统发送的事件消息、优惠券过期消息等。 考拉app消息中心的入口位于首页的右上角。 单击可显示消息框列表,单击消息框可显示该框中的消息列表。 也有单击可跳转到特定URL的框。

消息中心的功能简单来说就是提供接口发送消息,用户接收消息并进行查看。

消息的发送可以分为私信的发送、多播、广播

要查看消息,请执行以下操作:

1 .发送消息时,根据消息类型设置消息框未读计数(1操作)最新副本、最新时间等

2 .查询回复消息框列表(每个框的未读计数、最新副本和正确返回最新时间) ) )。

3 .单击框删除未读消息数(在当前实现中,只需单击框即可清除该框中所有未读消息数) (返回框中的消息列表) )还有跳转到特定url的消息框)。

2 .消息框越多,处理方法越不同

刚访问消息中心时,活动精选等6个消息框(处理逻辑相同,统称普通框),每个消息框的处理逻辑相同。

1 .发送消息时,增加箱子的未读件数,将消息ID填入箱子的消息ID列表中,设定箱子的最新副本和时间

2 .点击盒子,清空盒子未读计数

3 .进入箱子,根据箱子的消息ID列表返回消息列表

如果一直是这样的话,那会很棒,但很遗憾……。 在增加种草社区箱子需求的过程中,种草社区箱子的处理逻辑与普通箱子不同,大致要求:

1 .种草社区盒子只作为查看种草短信的一个入口,短信本身不存在短信中心,盒子的未读计数和副本由种草社区给出。

2 .点击种草社区框不清空未读计数。

3 .单击种草社区框,跳转到用户种草社区的消息页面。

因此,清空草坪社区箱子的未读计数、最新拷贝、最新时间、未读计数、点击草坪社区箱子跳转等操作需要与普通箱子不同的逻辑集。

如果只是种草社区的箱子需要特别处理的话,也就罢了,但遗憾的是还有售后服务的进度信息箱。 不仅如此,黑卡先生的消息框和品牌的动态消息框层出不穷,这两个框的处理逻辑也不一样。 如果黑卡先生的信息框的需求,所有关注黑卡先生账户或正式会员的用户都可以看到黑卡先生的信息框。 每次在黑卡的账户上发布或更新新文章时,都会以未读计数提示用户……。

以此方式,预计四个消息框需要特殊处理,并在未来需要访问更多特殊处理的消息框。

3 .简单的实现方式

1 .草坪社区消息框的简单实现方式是通过mq消息设置最新副本、未读计数等。 也就是说,草坪社区发送mq信息,传达信息中心方框的数据,信息中心只消耗mq信息。

2 .售后进度信息框打开两个独立的dubbo界面,用户设置售后进度信息框进行读取。 这两个dubbo接口只能用于售后的信息框

//设置售后服务进度消息框

publicbooleansetaftersalemessageboxcontent (string account id,Integer msgNum,String lastContent,Long lastTime, 读取BooleanOldrer //售后服务进度消息框publicbooleanreadaftersalemessagebox (字符串帐户id ); 这种实现方式的优点是简单直接,如果还有特殊的处理箱,只需打开dubbo接口实现特殊的逻辑即可。 缺点是接口不通用,每次都需要安装dubbo接口,扩展性差,部分操作NCR码反复写入。

四.利用战略模式重构消息框处理

在迎接黑卡和品牌动态消息框的需求时,考虑到重新开通dubbo接口会增加代码维护的难度,考虑采用策略模型将各框的处理抽象为统一的行为。

首先,说明战略模式。 参考资料: https://blog.csdn.net/zuoxiao .策略模式定义了一组算法,每个算法都可以封装起来并相互替换。 策略模型独立于使用算法的客户进行变化。

分析表明,战略模式定义并封装了一系列算法。 它们可以相互替换,即具有共性,所述共性体现在策略接口的行为上,且为实现最后一个词的目的,即独立于使用该算法的客户变化,需要客户端依赖于策略接口

通过与策略模型的定义比较,可以将所有消息框的处理抽象到一个策略接口中,使每个具体框的处理对应一个具体的策略实现类。 并根据消息框的类型选择特定的策略类,实现处理该框的简单工厂方法。

按照这个方向,将箱子的处理抽象到以下MessageBoxHandler接口中: 这个接口有四种方法。

1 .设定信息框的内容(最新复印、未读计数、最新时间等)

2 .获取消息框的内容

3 .读取清洁消息框的内容

4 .获取消息框中的消息列表

//*

通用消息框处理接口。 使用策略模式/公共接口消息框

Handler { /*

* 设置对应消息盒子的内容,包括最新文案,最新时间,强弱消息数,跳转url */public void setMessageBoxContent(KaolaAppMessage kaolaAppMessage, MessageBoxSetInfo messageBoxSetInfo, List accountIdList, int boxType, Boolean needUpdateNewMessageTime); /** * 根据用户账号和盒子类型(或者是传入的盒子缓存)得到盒子内容(最新文案,最新时间,强弱消息数) */public KaolaAppMessageBox getMessageBoxContent(String accountId, int boxType, Map hintMap, boolean needMessage, boolean hasCalculate, Set filterMsgTypeSet); /** * 清空消息盒子上的内容 */public void clearMessageBoxContent(List accountIdList, int boxType); /** * 根据账号和盒子类型返回该盒子中消息列表 */public List getMessageList(String accountId, int boxType, Long indexMessageId, int limit, List filterMsgTypes);

}
有具体盒子处理策略实现类:

UML图如下:

对照策略模式的UML图,可以看出MessageBoxHandler对应策略接口,抽象了消息盒子可以有的所有操作。MessageBoxHandlerWrapper是该接口的默认空实现,所有具体的盒子处理类只需要直接继承该类,然后覆盖需要的方法即可。对于消息盒子不需要的方法,则直接使用MessageBoxHandlerWrapper中的空实现(如种草社区盒子的getMessageList就是空实现)。

MessageBoxHandlerFactory中简单工厂方法getMessageBoxHandler根据盒子类型获取具体的盒子处理类:

public void init() { messageBoxhandlerArr = new MessageBoxHandler[11]; messageBoxhandlerArr[0] = defaultMessageBoxHandler; messageBoxhandlerArr[1] = defaultMessageBoxHandler; messageBoxhandlerArr[2] = defaultMessageBoxHandler; messageBoxhandlerArr[3] = defaultMessageBoxHandler; messageBoxhandlerArr[4] = defaultMessageBoxHandler; messageBoxhandlerArr[5] = defaultMessageBoxHandler; messageBoxhandlerArr[6] = defaultMessageBoxHandler; messageBoxhandlerArr[7] = communityMessageBoxHandler; messageBoxhandlerArr[8] = afterSaleMessageBoxHandler; messageBoxhandlerArr[9] = blackCardMessageBoxHandler; messageBoxhandlerArr[10] = brandDynamicMessageBoxHandler;} public static MessageBoxHandler getMessageBoxHandler(int boxType) { if (boxType < 0 || boxType >= messageBoxhandlerArr.length) { return messageBoxhandlerArr[0]; } return messageBoxhandlerArr[boxType];}

如此重构之后在代码中调用盒子处理类只需要如下调用

MessageBoxHandlerFactory.getMessageBoxHandler(boxType).getMessageList(accountId, boxType, indexMessageId, limit, filterMsgTypes);

重构之后的优点:
1.所有消息盒子的处理有一个统一的抽象,对外dubbo接口更加通用。
2.dubbo接口实现变得简单,只需要根据盒子类型调用相关Handler的方法即可。
3.可扩展性强,此后再接入特殊处理的消息盒子,只需要增加对应的Handler类,几乎不需要修改新增dubbo接口。

更多网易技术、产品、运营经验分享请访问网易云社区。

文章来源: 网易云社区

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。