您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页最代码网站中关于动态表event的设计思路

最代码网站中关于动态表event的设计思路

来源:爱玩科技网


这样就囊括了所有会出现的用户event,只要在java层做业务转换即可:

最核心的event数据转换java类源码:

package com.zuidaima.core.service.impl;

	private void setSourceAndTarget(Event event, EventRule _eventRule) {
	try {
	EventRule eventRule = new EventRule();
	eventRule.setCreateTime(_eventRule.getCreateTime());
	eventRule.setExtendJson(_eventRule.getExtendJson());
	eventRule.setId(_eventRule.getId());
	eventRule.setName(_eventRule.getName());
	eventRule.setNiubi(_eventRule.getNiubi());
	eventRule.setType(_eventRule.getType());
	eventRule.setUpdateTime(_eventRule.getUpdateTime());
	BaseEntity source = null;
	BaseEntity target = null;
	long sourceId = event.getSourceId();
	long targetId = event.getTargetId();
	JSONObject extend = eventRule.getExtend();
	extend = eventRule.getExtend();
	String description = (String) extend.get("description");
	String _description = null;
	Answer answer = null;
	Project project = null;
	switch (eventRule.getType()) {
	case ModuleConstants.EVENT_TYPE_RULE_PROJECT_CREATE:
	case ModuleConstants.EVENT_TYPE_RULE_PROJECT_DELETE_BY_USER:
	case ModuleConstants.EVENT_TYPE_RULE_PROJECT_DELETE_BY_ADMIN:
	case ModuleConstants.EVENT_TYPE_RULE_PROJECT_VIEW:
	case ModuleConstants.EVENT_TYPE_RULE_PROJECT_COLLECT:
	case ModuleConstants.EVENT_TYPE_RULE_PROJECT_REWARD:
	if (sourceId > 0) {
	source = projectService.findOneById(sourceId);
	}
	if (targetId > 0) {
	target = projectService.findOneById(targetId);
	}
	project = (Project) target;
	if (source != null) {
	project = (Project) source;
	}
	if (project == null) {
	return;
	}
	_description = String.format(
	description,
	ModuleConstants.PROJECT_TYPE_DESC_MAP.get(
	project.getType()).getDesc());
	break;
	case ModuleConstants.EVENT_TYPE_RULE_POST_CREATE:
	case ModuleConstants.EVENT_TYPE_RULE_POST_DELETE_BY_USER:
	case ModuleConstants.EVENT_TYPE_RULE_POST_DELETE_BY_ADMIN:
	if (sourceId > 0) {
	source = postService.findOneById(sourceId);
	}
	if (targetId > 0) {
	target = postService.findOneById(targetId);
	}
	Post post = (Post) target;
	if (source != null) {
	post = (Post) source;
	}
	_description = String.format(description,
	ModuleConstants.POST_TYPE_DESC_MAP.get(post.getType()));
	break;
	// case ModuleConstants.EVENT_TYPE_RULE_GROUP_CREATE://暂时没有这种动态
	case ModuleConstants.EVENT_TYPE_RULE_GROUP_JOIN_IN:
	case ModuleConstants.EVENT_TYPE_RULE_GROUP_DELETE_BY_USER:
	// case
	// ModuleConstants.EVENT_TYPE_RULE_GROUP_DELETE_BY_ADMIN://暂时没有这种动态
	if (sourceId > 0) {
	source = groupService.findOneById(sourceId);
	}
	if (targetId > 0) {
	target = groupService.findOneById(targetId);
	}
	Group group = (Group) source;

	_description = String
	.format(description,
	ModuleConstants.GROUP_TYPE_DESC_MAP.get(group
	.getType()));
	break;
	case ModuleConstants.EVENT_TYPE_RULE_COMMENT_CREATE:
	case ModuleConstants.EVENT_TYPE_RULE_COMMENT_DELETE_BY_USER:
	case ModuleConstants.EVENT_TYPE_RULE_COMMENT_DELETE_BY_ADMIN:
	target = commentService.findOneById(targetId);
	Comment comment = (Comment) target;
	int commentType = comment.getType();
	if (commentType == ModuleConstants.COMMENT_TYPE_ANSWER) {
	source = answerService.findOneById(sourceId);
	answer = (Answer) source;
	project = (Project) answer.getTarget();
	_description = String.format(
	description,
	ModuleConstants.PROJECT_TYPE_DESC_MAP.get(
	project.getType()).getDesc());
	} else if (commentType == ModuleConstants.COMMENT_TYPE_PROJECT) {
	source = projectService.findOneById(sourceId);
	project = (Project) source;
	_description = String.format(
	description,
	ModuleConstants.PROJECT_TYPE_DESC_MAP.get(
	project.getType()).getDesc());
	} else if (commentType == ModuleConstants.COMMENT_TYPE_POST) {
	source = postService.findOneById(sourceId);
	post = (Post) source;
	_description = String.format(description,
	ModuleConstants.POST_TYPE_DESC_MAP.get(post
	.getType()));
	} else {

	}
	break;
	case ModuleConstants.EVENT_TYPE_RULE_ANSWER_CREATE:
	case ModuleConstants.EVENT_TYPE_RULE_ANSWER_BEEN_SET_PERFECT:
	source = projectService.findOneById(sourceId);
	target = answerService.findOneById(targetId);
	project = (Project) source;
	_description = String.format(
	description,
	ModuleConstants.PROJECT_TYPE_DESC_MAP.get(
	project.getType()).getDesc());
	break;
	case ModuleConstants.EVENT_TYPE_RULE_ANSWER_GET:
	case ModuleConstants.EVENT_TYPE_RULE_ANSWER_DELETE_BY_USER:
	case ModuleConstants.EVENT_TYPE_RULE_ANSWER_DELETE_BY_ADMIN:
	source = answerService.findOneById(sourceId);
	answer = (Answer) source;
	Project _project = (Project) answer.getTarget();
	_description = String.format(
	description,
	ModuleConstants.PROJECT_TYPE_DESC_MAP.get(
	_project.getType()).getDesc());
	break;
	case ModuleConstants.EVENT_TYPE_RULE_REPUTATION_CREATE:
	if (sourceId > 0) {
	source = reputationService.findOneById(sourceId);
	}
	if (targetId > 0) {
	target = reputationService.findOneById(targetId);
	}
	break;
	case ModuleConstants.EVENT_TYPE_RULE_USER_FOLLOW:
	source = userService.findOneById(sourceId);
	User _user = (User) source;
	_description = String
	.format(description,
	"" + _user.getName() + "");
	break;
	case ModuleConstants.EVENT_TYPE_RULE_MENTION_COMMENT:
	target = commentService.findOneById(targetId);
	comment = (Comment) target;
	commentType = comment.getType();
	if (commentType == ModuleConstants.COMMENT_TYPE_ANSWER) {
	source = answerService.findOneById(sourceId);
	answer = (Answer) source;
	project = (Project) answer.getTarget();
	_description = String.format(
	description,
	ModuleConstants.PROJECT_TYPE_DESC_MAP.get(
	project.getType()).getDesc());
	} else if (commentType == ModuleConstants.COMMENT_TYPE_PROJECT) {
	source = projectService.findOneById(sourceId);
	project = (Project) source;
	_description = String.format(
	description,
	ModuleConstants.PROJECT_TYPE_DESC_MAP.get(
	project.getType()).getDesc());
	} else if (commentType == ModuleConstants.COMMENT_TYPE_POST) {
	source = postService.findOneById(sourceId);
	post = (Post) source;
	_description = String.format(description,
	ModuleConstants.POST_TYPE_DESC_MAP.get(post
	.getType()));
	} else {

	}
	break;
	case ModuleConstants.EVENT_TYPE_RULE_MENTION_POST:
	source = postService.findOneById(sourceId);
	break;
	default:
	_description = description;
	}

	extend.put("description", _description);
	eventRule.setExtend(extend);
	eventRule.setExtendJson(extend.toString());
	event.setEventRule(eventRule);

	event.setSource(source);
	event.setTarget(target);
	} catch (Exception e) {
	logger.error("Fail to setSourceAndTarget event:" + event);
	}
	}

freemarker显示层转换核心代码:

<#switch event.eventRule.type>
	<#case event_type_rule_post_create>
	<@event_post_macro event.target/>
	<#break>
	<#case event_type_rule_project_create>
	<@event_project_macro event event.target/>
	<#break>
	<#case event_type_rule_project_view>
	<#case event_type_rule_project_collect>
	<#case event_type_rule_project_reward>
	<@event_project_macro event event.source/>
	<#break>
	<#case event_type_rule_comment_create>
	<@event_comment_macro event event.target/>
	<#break>
	<#case event_type_rule_answer_create>
	<@event_answer_macro event event.target/>
	<#break>
	<#case event_type_rule_answer_get>
	<#case event_type_rule_answer_been_set_perfect>
	<@event_answer_macro event event.source/>
	<#break>
	<#case event_type_rule_mention_comment>
	<@event_comment_macro event event.target/>
	<#break>
	<#case event_type_rule_mention_post>
	<@event_post_macro event.source/>
	<#break>
	

比如其中一种event type的freemarker macro代码如下:

<#macro event_post_macro post>
	
	${post.contentExt}
	
	 ${post.thirdSort}
	
	

这样的设计符合高内聚低耦合的设计思路,未来可以根据业务实现无限扩张,当然代价就是event表越来越大,但可以通过分库分表来分担压力,大家可以参考下,有好的意见可以留言。

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务