功能设计问题(设计模式)

来源:3-5 嵌套迭代,小心外面的过早耗尽!

无心铁憨憨

2020-09-01

一哥,你好!问题背景是这样的。

现在在做活动的功能,有多种活动,每种活动创建的时候需要的参数都不一样,我现在的写法是一种活动对应一个Controller -> Service,所以有多少个活动类型就有多少个Controller及Service,这样写是OK的,但是感觉太low了,我想有没有什么办法可以优化一下?

我的想法是,把Controller给精简到只有一个,所有活动的创建都集中到一个接口里面,然后通过不同的活动类型去调用不同的实现类,但是现在碰到的问题就是接口的入参不知道该怎么去定义了,因为每种活动需要的参数都不一样,例如:活动1需要的入参是 BO1,活动二需要的入参是BO 2,类似这样。

请问一哥可以提供一下实现思路吗?

写回答

2回答

张勤一

2020-09-01

孤鸥你好:

    首先来说,有多少个活动类型就有多少个 Controller 方法和 Service 肯定是不行的,这样代码没有办法维护,而且改动起来也很麻烦。合理的做法是 Controller 方法只有一个、Service 方法也只有一个。那么,怎么去实现呢?

    1. 定义一个枚举类,把所有的活动类型都定义在枚举类中

    2. 定义一个活动基类,只定义所有的活动都有的属性,比如 id、name 这些,然后每一种活动都写一个 Java Class,继承自这个基类

    3. 定义一个 Map,K 是活动的枚举类型,V 是活动类的 Class 对象(相信你已经看出来了,就是要拿到活动对应的 Class 对象做反序列化)

    4. 前端传递的参数带有活动的类型和活动的信息字符串,我们根据类型拿到对应的活动 Class 对象,再反序列化成为具体的活动 Java Object 就可以处理啦


    我是勤一,致力于将这门课程的问答区打造为 Java 知识体系知识库,Java 知识体系 BBS!共同建造、维护这门课程,我需要每一个你!

3
3
无心铁憨憨
非常感谢!
2020-10-14
共3条回复

春去_秋来

2020-09-08

这个思路貌似和 支付宝支付、微信支付、网银支付等多种支付是一样的

1
0

Java实操避坑指南 SpringBoot/MySQL/Redis错误详解

掌握业务开发中各种类型的坑,,Java web开发领域通用

452 学习 · 204 问题

查看课程