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

网络营销的策划方案外包网络优化

网络营销的策划方案,外包网络优化,网页设计的实验报告,网站备案 图标引言 最近在使用函数式编程时#xff0c;突然有了一点心得体会#xff0c;简单说#xff0c;用好了函数式编程#xff0c;可以极大的实现方法调用的解耦#xff0c;业务逻辑高度内聚#xff0c;同时减少不必要的分支语句#xff08;if-else#xff09;。 一、函数式编…引言 最近在使用函数式编程时突然有了一点心得体会简单说用好了函数式编程可以极大的实现方法调用的解耦业务逻辑高度内聚同时减少不必要的分支语句if-else。 一、函数式编程就是Lambda表达式吗 Java语言早在 JDK8 就提供了函数式编程的基础。 你可能会问函数编程不就是lambda表达式吗 的确大多数开发可能还停留在 lambda 表达式的使用层面但请注意我从标题、文章开篇都在强调“函数式编程”很明显我有意区别函数式编程和lambda表达式两者的概念。 Java 8 引入的函数式编程到底是什么最近我在开发过程中遇到了一个场景才让我解开了这个困扰我的问题。 二、一个小场景——多路调用 我遇到的场景其实并不复杂或者说我们每天都在写如此场景我甚至并不知道这么简单的场景有没有相应的专有名词来表示就暂将其称为“多路调用场景”。让我们简单模拟一下。 场景描述 A Service 和 B Service 都依赖 CService。 A 和 B都用到了 C的一个方法 doProcess()但 doProcess() 在处理 A 和 B的请求时又需要拿到 A 或 B 的业务数据。 该如何实现 doProcess() 方法 AllArgsConstructor class AService {private CService cService;public void processData() {ListObject all this.getAll();cService.doProcess(all);}private ListObject getAll() {return Collections.emptyList();} }AllArgsConstructor class BService {private CService cService;public void processData() {ListObject data this.queryBDatas();cService.doProcess(data);}private ListObject queryBDatas() {return new ArrayList();} }class CService {public void doProcess(ListObject busiData) {// 执行C自己的处理逻辑...busiData.stream().forEach(d - {System.out.println(d);});} }/*** 测试代码*/ public class Test {public static void main(String[] args) {// 实例化服务对象CService cService new CService();AService aService new AService(cService);BService bService new BService(cService);// A - C 处理请求aService.processData();// B - C 处理请求bService.processData();} }如上代码所示 A、B 的processData 方法都调用C的doProcess 方法他们都将 doProcess 所需的数据通过参数传递过去。这种实现方式虽然可以成功的适配不同的调用者但是数据的生成是在调用 doProcess 前一旦doProcess执行了一些校验逻辑而无法用到这些已经准备好的数据就可能白白浪费查询资源。 另一种实现是通过循环依赖将A或B的实例反过来也注入到 C 服务中在 doProcess 中需要用到A 或 B 的数据时才去查询。这种实现方式虽然可以实现懒加载但又引入了另一个问题就是高耦合性而且依然需要通过 if-else 判断具体是要执行 A.getAll 还是需要执行 B.queryList代码冗杂不说扩展性也很糟糕。 当然上述代码只是个模型实际业务可能比这还要复杂。那到底有没有一种既可以实现懒加载又高度内聚不需要循环依赖的实现方式呢 三、授人以鱼不如授人以渔 请原谅我起了一个这么哗众取宠的小节标题我后面会解释。 3.1 传统思路的弊端 传统的实现思路将数据提前准备好传递过去或使用循环依赖增加判断条件执行不同的业务逻辑。 似乎这类实现已被大家习以为常但就像前面描述的数据传递可能会造成性能、资源等浪费传统的延迟处理又需要搭配循环依赖从而造成严重的依赖混乱问题明明公共服务被业务服务依赖公共服务却反过来还要依赖业务服务扩展性极低。 而函数式编程可以很好的解决这个问题 3.2 授人以渔 Java 8 引入的函数式编程允许开发者将函数像参数一样传递。 直到最近我才终于理解了这个定义。函数实际上就是一个具体的处理逻辑一个解决方案一个“捕鱼的方法”、一个可开箱即用的“锦囊妙计”。 我们将函数传递到另一个方法中那么在这个方法中就可以直接去执行这个函数。 再回到上面的场景中A和 B调用 C 的 doProcess() 方法如果使用函数式编程该如何实现 首先定义一个业务数据查询函数 // 业务数据查询函数 FunctionalInterface public interface BusiDataQueryFunc {ListObject queryList(); }然后将其作为参数声明到 doProcess 参数中令A或B调用时传递一个具体的实现逻辑如下所示 AllArgsConstructor class AService {private CService cService;public void processData() {cService.doProcess(() - this.getAll());}private ListObject getAll() {// A 业务数据查询逻辑return Collections.emptyList();} }AllArgsConstructor class BService {private CService cService;public void processData() {// 传入数据查询函数cService.doProcess(() - this.queryBDatas());}private ListObject queryBDatas() {// B 业务数据查询逻辑return new ArrayList();} }class CService {public void doProcess(BusiDataQueryFunc busiDataQueryFunc) {// 查询调用者所需数据ListObject busiData busiDataQueryFunc.queryList();// 执行C自己的处理逻辑...busiData.stream().forEach(d - {System.out.println(d);});} }如此在doProcess中就不需要使用任何的 if 判断同时也实现了懒加载获取到业务的数据。相比传统的将数据传递或通过特定参数加if-else按条件查询耦合度更低这是集性能强、扩展性强、耦合度低等优点于一身的优秀实现方式。 如果把数据传递到方法中比作授人以鱼那么函数传递就是授人以渔。将“捕鱼的方法”告诉被调用者这就是为什么我将函数式编程称为——授人以渔的开发思想。 四、总结 在多路调用的场景中通常会需要在被调用方法中使用到调用者的一些数据传统的编程方式是直接将数据作为参数传递过去或者通过一些业务标识用if-else的方式来判断该调用哪个业务方法。 直接传递数据的方式提前将数据准备好会有性能问题可能在被调用方法的校验逻辑执行中断用不到数据浪费系统资源而通过普通的if-else 分支又需要将调用者注入到被依赖方虽然实现了懒加载但本身形成了循环依赖造成了高耦合存在潜在的开发成本。 所以Java 8 提供的函数式编程将获取数据的方式通过函数传递给被调用者授人以渔即满足懒加载又解耦了依赖关系。这在依赖关系复杂的系统中是一个非常有用的设计思想。
http://www.hkea.cn/news/14388488/

相关文章:

  • 宁波模板建站哪家好查网站排名
  • 南京网站seo建设网站费用记什么科目
  • 装修公司网站 源码海阔淘宝客助手wordpress演示站 | 紫色清新商城模板
  • 青海建设厅职称网站建设协会网站的公司
  • 大连专业网站建设百度ai智能搜索引擎
  • 工程建设网站策划方案广东建设厅证件查询网站
  • 外贸公司 网站自己怎么做wap网站
  • 百度公司网站推广怎么做做招聘海报的网站
  • 郑州pc网站开发湖北省工程建设信息官方网站
  • 佛山北京网站建设公司哪家好025网站建设
  • 医院网站可以自己做吗wordpress怎么压缩
  • 河南国安建设集团有限公司网站可以显示文章列表的wordpress主题
  • 邢台建设专业网站宿州网站建设电话
  • 网站标题第一个词wordpress仿站js如何导入
  • 建设银行u盾用网站打不开汽车网站建设费用
  • 简述营销网站建设策略网站怎么营销
  • 嘉兴网站托管渭南 网站建设
  • 正邦做网站吗wordpress数字链接出现404
  • 律师网站建设案例活动页面模板
  • seo品牌优化百度资源网站推广关键词排名做国际网站花钱吗
  • 网站建设的基本要素网站前置或专项审批
  • 长春网站制作教程wordpress oa 插件
  • 购物网站建设咨询网站组成元素
  • 旅游网站开发的意义相关资料直播电商平台开发
  • 网站建设提供资料表17zwd一起做网店官网
  • 北京做网站要多少钱发卡网站建设方案
  • 与网络公司洽谈做网站需要注意什么响应式网页设计技巧
  • 自助建站凡科网建模外包网站
  • 毕设做的网站可以用模板改吗长沙房产网二手房
  • 琼海建设网站改变网站的域名