游泳
子思
游泳。本文将带您了解游泳如何解构自由鱼代码。
在多个实现中定期执行。本文将从一个例子开始，详细介绍这些概念。
例如，在共享页面中，标题字段的显示逻辑不同：
此单一实现通常编写为以下代码：
我们应该写很多类似的代码。当逻辑简单时，这样写是可以理解的，但当逻辑开始变得复杂时，这样写会有更多的缺点：
提取公共逻辑很困难，代码块变得越来越臃肿。新类型的实现具有更多的相似性和很少的相似性和差异性，很难重用原始代码。各种类型的代码实际上是集成在一起的。更改代码可能会影响其他类型，并增加在线风险和测试回归成本。对于新开发人员来说，理解成本很高，很难开始，这实际上降低了开发效率。
根据面向对象的思想，所有类型的标题获取方式都是相同的，应该沉淀到平台逻辑中，而标题获取可以抽象为接口方法，类型a b和c都有自己的实现。对于获取字幕的接口方法，它有多种实现。
毕竟，大多数热爱阅读的人更注重质量，出版社是衡量质量的重要标准。这是价格展览还是出版社？还是两者都有？如果全部展示，会先展示价格还是出版社？如果一行不足以写下所有的内容呢？无论上述哪种显示方法，都有“规则”（在设计模式中，它被称为“策略”），代码是根据“规则”编写的。
上面的示例是多实现规则执行的经典场景。类似地，诸如b t e s t双写之类的逻辑也是一种用于多个常规执行实现的应用场景。
—图书类别婴儿被贴上了“a型”和“书”的标签。“类型a”的字幕获取接口方法对应于一个实现，而“书籍”的字幕获取接口方法对应于另一个实现。标记多个对象时，会发生冲突。
冲突的解决取决于“规则”。“规则”最重要的两个部分是优先级（优先级）和减少（减少）策略；执行顺序由优先级决定，显示第一次执行的结果、显示第二次执行的结果或拼接两次执行的结果都是简化策略。“异常处理”和“其他方法”也可以包括在内。
如上所述，我们可以了解游泳的基本概念：
分析对象具有的标签。将不可变逻辑和可变逻辑分开。变量逻辑被抽象为接口。变量逻辑可以根据不同的标签以多种方式实现。每个实现都是独立的，也就是说，每个实现都是相互隔离的。当一个对象同时具有多个标签时，使用优先级和约简策略来解决冲突问题。
值得一提的是，游泳的基本理念来自阿里巴巴中泰的tmf架构。有关tmf的详细信息，请参阅《双十一——阿里巴巴技术演进与超越》一书中的“基于tmf框架的交易平台架构”一章。
因此，使用游泳框架将带来以下好处：
代码逻辑清晰，变量和不可变项一目了然。代码重用变得更高。变量逻辑根据标签进行隔离。单个标签的实现不会影响其他标签的实现，并降低开发和测试的成本。无论是根据“类型”还是类别进行分类，相应的发展和测试学生只需要注意相应的逻辑。新开发人员可以快速理解并轻松入门。
与在运行时根据标记扫描和加载实现类的方式相比，游泳框架在静态阶段更倾向于分析具有多个标记的对象在不同实现方法下的执行逻辑。一方面，缓存可以显著缩短响应时间。另一方面，在开发过程中查找和排除问题也很方便。总体实施原则可分为登记和执行两部分。基本流程如下：
在注册过程中，Sweering框架将扫描文件（多个实现接口、减少策略和冲突优先级配置了JAVA注释或x ml文件。下面的代码示例描述了如何配置多个实现接口及其实现类），并将扫描结果注册到本地缓存中，在执行过程中，游动框架会直接从本地缓存中找到所需的冲突优先级配置和减少策略，这有助于缩短响应时间。此外，使用统一的本地缓存有利于“可视化展示”——开发者可以直观地看到和分析程序的执行过程；产品经理还可以直观地看到哪些功能点可以轻松扩展，哪些优先级需要更新等等，甚至有助于估计和安排需求。使用统一本地缓存还提供了“可视化配置”的可能性。结合阿里巴巴内部钻石或转换框架（轻量级交换机和动态配置项管理框架），冲突优先级可以在不更新代码的情况下更新，只需推送配置即可，为开发和测试提供了极大的便利。
空闲的fish服务器应用程序基本上基于spring框架。为了便于在服务器应用程序中使用Swinging框架，在设计之初，我们要求Swinging与spring框架100%兼容。最终的实现版本实现了这一点。业务bean和游泳框架引入的bean都完全由spring容器管理。该框架还使用CGLIB来表示上图中执行过程中的一系列过程。它完全由框架执行。它是完全透明的，对学生的发展不敏感。它的使用方式与普通的单一实现接口类似，如下面的代码块所示。
目前，swiming框架已经应用于商品出版和编辑的一些过程中。我们正在积极将游泳框架扩展到更多流程。下图显示了基于游泳框架的商品领域核心功能的转型计划。