商业代码解构武器——游泳

频道:闲鱼技术 日期: 浏览:684
作者:自由鱼技术-子思

微信号:ccjun91
添加微信群,试用软件
复制微信号

业务的不断发展,商品种类的不断增加,业务需求的不断增加,使得悠闲鱼代码“臭”——平台代码与业务代码耦合严重,难以分离;业务之间的代码交织,缺乏分解。这也是业内常见的问题。为了解决这个问题,自由鱼开发了一套技术框架——游泳。本文将带您了解游泳如何解构自由鱼代码。

游泳是瑞士军刀的缩写。众所周知,瑞士军刀是一种小巧灵活的工具,适用于各种场景。在free fish服务器中,游泳框架也是一个小型灵活的技术框架,适用于各种场景。它使用的场景具有相同的功能——在多个实现中定期执行。本文将从一个例子开始,详细介绍这些概念。

熟悉免费鱼的朋友应该知道,免费鱼应用中有丰富的商品形式,可以称为a型,b型和c型也可以有自己的子类型。每种类型的业务逻辑都有一定的共性,但也有一些差异——例如,在共享页面中,标题字段的显示逻辑不同:

此单一实现通常编写为以下代码:

我们应该写很多类似的代码。当逻辑简单时,这样写是可以理解的,但当逻辑开始变得复杂时,这样写会有更多的缺点:

提取公共逻辑很困难,代码块变得越来越臃肿。新类型的实现具有更多的相似性和很少的相似性和差异性,很难重用原始代码。各种类型的代码实际上是集成在一起的。更改代码可能会影响其他类型,并增加在线风险和测试回归成本。对于新开发人员来说,理解成本很高,很难开始,这实际上降低了开发效率。

根据面向对象的思想,所有类型的标题获取方式都是相同的,应该沉淀到平台逻辑中,而标题获取可以抽象为接口方法,类型a b和c都有自己的实现。对于获取字幕的接口方法,它有多种实现。

那么什么是定期执行?在上面的例子中,我们按照商品的类型(类型)进行了逻辑上的分离,但通常不能如此彻底地分离。例如,运营团队的划分也可以根据商品类型(类型)、类别(类别:如手机、3c数码、服装、书籍等)进行划分系统,甚至区域。那么,一种商品不仅可能受到商品类型系统的约束,还可能受到类别系统和区域的约束。如果几个约束条件不一致,就会产生冲突。例如,字幕字段,从a类图书类别的角度来看,我们应该显示价格。从图书分类的角度来看,也许我们应该向出版社展示——毕竟,大多数热爱阅读的人更注重质量,出版社是衡量质量的重要标准。这是价格展览还是出版社?还是两者都有?如果全部展示,会先展示价格还是出版社?如果一行不足以写下所有的内容呢?无论上述哪种显示方法,都有“规则”(在设计模式中,它被称为“策略”),代码是根据“规则”编写的。

上面的示例是多实现规则执行的经典场景。类似地,诸如b t e s t双写之类的逻辑也是一种用于多个常规执行实现的应用场景。

在上述示例中,存在按商品类型或商品类别划分的冲突。事实上,没有类型或类别。对于商品的对象来说,这无非是给它贴上不同的标签——比如a型——图书类别婴儿被贴上了“a型”和“书”的标签。“类型a”的字幕获取接口方法对应于一个实现,而“书籍”的字幕获取接口方法对应于另一个实现。标记多个对象时,会发生冲突。

冲突的解决取决于“规则”。“规则”最重要的两个部分是优先级(优先级)和减少(减少)策略;执行顺序由优先级决定,显示第一次执行的结果、显示第二次执行的结果或拼接两次执行的结果都是简化策略。“异常处理”和“其他方法”也可以包括在内。

如上所述,我们可以了解游泳的基本概念:

分析对象具有的标签。将不可变逻辑和可变逻辑分开。变量逻辑被抽象为接口。变量逻辑可以根据不同的标签以多种方式实现。每个实现都是独立的,也就是说,每个实现都是相互隔离的。当一个对象同时具有多个标签时,使用优先级和约简策略来解决冲突问题。

值得一提的是,游泳的基本理念来自阿里巴巴中泰的tmf架构。

 

有关tmf的详细信息,请参阅《双十一——阿里巴巴技术演进与超越》一书中的“基于tmf框架的交易平台架构”一章。

因此,使用游泳框架将带来以下好处:

代码逻辑清晰,变量和不可变项一目了然。代码重用变得更高。变量逻辑根据标签进行隔离。单个标签的实现不会影响其他标签的实现,并降低开发和测试的成本。无论是根据“类型”还是类别进行分类,相应的发展和测试学生只需要注意相应的逻辑。新开发人员可以快速理解并轻松入门。

与在运行时根据标记扫描和加载实现类的方式相比,游泳框架在静态阶段更倾向于分析具有多个标记的对象在不同实现方法下的执行逻辑。一方面,缓存可以显著缩短响应时间。另一方面,在开发过程中查找和排除问题也很方便。总体实施原则可分为登记和执行两部分。基本流程如下:

在注册过程中,Sweering框架将扫描文件(多个实现接口、减少策略和冲突优先级配置了JAVA注释或x ml文件。下面的代码示例描述了如何配置多个实现接口及其实现类),并将扫描结果注册到本地缓存中,在执行过程中,游动框架会直接从本地缓存中找到所需的冲突优先级配置和减少策略,这有助于缩短响应时间。此外,使用统一的本地缓存有利于“可视化展示”——开发者可以直观地看到和分析程序的执行过程;产品经理还可以直观地看到哪些功能点可以轻松扩展,哪些优先级需要更新等等,甚至有助于估计和安排需求。使用统一本地缓存还提供了“可视化配置”的可能性。结合阿里巴巴内部钻石或转换框架(轻量级交换机和动态配置项管理框架),冲突优先级可以在不更新代码的情况下更新,只需推送配置即可,为开发和测试提供了极大的便利。

空闲的fish服务器应用程序基本上基于spring框架。为了便于在服务器应用程序中使用Swinging框架,在设计之初,我们要求Swinging与spring框架100%兼容。最终的实现版本实现了这一点。业务bean和游泳框架引入的bean都完全由spring容器管理。该框架还使用CGLIB来表示上图中执行过程中的一系列过程。它完全由框架执行。它是完全透明的,对学生的发展不敏感。它的使用方式与普通的单一实现接口类似,如下面的代码块所示。

目前,swiming框架已经应用于商品出版和编辑的一些过程中。我们正在积极将游泳框架扩展到更多流程。下图显示了基于游泳框架的商品领域核心功能的转型计划。经过基于游泳的升级改造后,休闲鱼类商品领域的核心功能按照业务进行了隔离。每个商业发展专业的学生只需要与相应的商业发展相关。它的一般逻辑和业务隔离完全由基于框架的第一层和第二层保证。代码质量和开发效率将显著提高。

游动是idle fish开发的一个多实现的规则执行框架,可以很好地解决平台代码和业务代码之间严重耦合、业务代码和业务代码之间相互交织、缺乏可拆卸性的问题。游泳与春天100%兼容,使用方便,启动迅速。名副其实的游泳架就像一把瑞士军刀,可用于各种场景,小巧方便。当然,游泳仍在发展,其特点和功能仍在丰富。同样,休闲鱼也有许多有趣和创造性的尝试。如果你感兴趣,请加入我们。

没有供应的闲置鱼类的做法是什么?如何做到这一点?游手好闲的鱼没有货源。闲置市场规模超过万亿。二手电子商务迎来了循环经济的红利。“校园圈”真的能成为游鱼生长的第二个引擎吗?如果闲置的鱼被恶意退回怎么办?开店时如何提高闲置鱼的暴露率?

关键词:闲鱼代闲鱼
复制成功

微信号: ccjun91
添加微信群,试用软件

我知道了
添加微信

微信号: ccjun91
添加微信群,试用软件

一键复制加过了
18749471747
微信号:ccjun91添加微信
ccjun91