添加微信群,试用软件
复制微信号
业务的不断发展,商品种类的不断增加,业务需求的不断增加,使雷宇的代码呈现“b a d s m e l”——平台代码与业务代码耦合严重,难以分离;业务之间的代码交织,缺乏分解。这也是业内常见的问题。为了解决这个问题,闲鱼开发了一套技术框架——swak。本文将带您了解SWAK如何解构免费的fish代码。
s w a k是s w i s a r m y k n i f e的缩写。众所周知,瑞士军刀是一种小巧灵活的工具,适用于各种场景。在free fish服务器中,swak框架也是一个小型灵活的技术框架,适用于各种场景。它使用的场景具有相同的功能——在多个实现中定期执行。本文将从一个例子开始,详细介绍这些概念。
熟悉免费鱼的朋友应该知道,在免费鱼a p中,有丰富的商品形式,可以称为a型、b型和c型。各种类型也可以有自己的子类型。每种类型的业务逻辑都有一些共同点,但也有一些不同之处——例如,在共享页面中,s u b t i t l e字段的显示逻辑不同:
此单一实现通常编写为以下代码:
我们应该写很多类似的代码。当逻辑简单时,这样写是可以理解的,但当逻辑开始变得复杂时,这样写会有更多的缺点:
提取公共逻辑很困难,代码块变得越来越臃肿。新类型的实现具有更多的相似性和很少的相似性和差异性,很难重用原始代码。各种类型的代码实际上是集成在一起的。更改代码可能会影响其他类型,并增加在线风险和测试回归成本。对于新开发人员来说,理解成本很高,很难开始,这实际上降低了开发效率。
根据面向对象的思想,获取TITLE的方法对于所有类型都是一致的,应该沉淀到平台逻辑中,而获取SUBTTLE可以抽象为一种接口方法,类型a、类型b和类型c的婴儿都有自己的实现。对于获取SUBT的接口方法,它有许多实现。
那么什么是定期执行?在上面的例子中,我们按照商品类型(TY p e)进行逻辑分离,但通常不能如此彻底地分离。例如,运营团队的划分也可能基于商品类型(t y p e)、分类系统(c a t e g o r y,如手机、3c数码、服装、书籍等),甚至是地区。那么,一种商品不仅可能受到商品类型系统的约束,还可能受到类别系统和区域的约束。如果几个约束条件不一致,就会产生冲突。例如,s u b t i t l e字段应该从a类的角度显示价格,也许从图书类别的角度显示出版社——毕竟,大多数热爱阅读的人更注重质量,出版社是衡量质量的重要标准。这是价格展览还是出版社?还是两者都有?如果全部展示,会先展示价格还是出版社?如果一行不足以写下所有的内容呢?无论上述哪种显示方法,都有“规则”(在设计模式中,它被称为“策略”),代码是根据“规则”编写的。
上面的示例是多实现规则执行的经典场景。类似地,诸如bt和double write之类的逻辑也是常规执行的多个实现的应用场景。
在上述示例中,存在按商品类型或商品类别划分的冲突。事实上,类型或类别并不重要。对于商品的对象来说,这无非是用不同的标签给它贴上标签——例如,a型图书类别的婴儿被贴上“a型”和“书”的标签。获取“a型”的SU BT接口的方法对应于一个实现,而获取“book”的SU BT接口的方法对应于另一个实现。标记多个对象时,会发生冲突。
冲突的解决取决于“规则”。“规则”最重要的两个部分是优先级(pr i o r i t y)和缩减(r e d u c e)策略;执行顺序由优先级决定,显示第一次执行的结果、显示第二次执行的结果或拼接两次执行的结果都是简化策略。“异常处理”和“其他方法”也可以包括在内。
如上所述,我们可以得到s w a k的基本概念:
分析对象具有的标签。将不可变逻辑和可变逻辑分开。变量逻辑被抽象为接口。变量逻辑可以根据不同的标签以多种方式实现。每个实现都是独立的,也就是说,每个实现都是相互隔离的。当一个对象同时具有多个标签时,使用优先级和约简策略来解决冲突问题。
值得一提的是,swak的基本理念借鉴了阿里巴巴中泰的tmf架构。有关tmf的详细信息,请参阅《双十一——阿里巴巴技术演进与超越》一书中的“基于tmf框架的交易平台架构”一章。
因此,使用s w a k框架将带来以下好处:
代码逻辑清晰,变量和不可变项一目了然。代码重用变得更高。变量逻辑根据标签进行隔离。单个标签的实现不会影响其他标签的实现,并降低开发和测试的成本。无论是根据“类型”还是类别进行分类,相应的发展和测试学生只需要注意相应的逻辑。新开发人员可以快速理解并轻松入门。
相比的的的的扫描的加载实现阶级字头的豪放的runtime,的swak框架的更座垫的high的狠抓逻辑的物体的几豪放直辖市不同实现方法的的静态时期.的的之一手,http可以显著减少的响应时间.的的其他手,它的也便捷的找到的troubleshoot问题期间发展.的总体实现原则可以的字头的两零件:登记的狠抓.的基本过程的的字头:
在注册过程中,SWAK框架将扫描文件(多个实现接口、减少策略和冲突优先级使用JAVA注释或XML文件进行配置。下面的代码示例描述了如何配置多个实现接口及其实现类),扫描结果在本地缓存中注册,在执行过程中,SWAK框架将直接从本地缓存中找到所需的冲突优先级配置和减少策略,这有助于减少响应时间。此外,使用统一的本地缓存有利于“可视化展示”——开发者可以直观地看到和分析程序的执行过程;产品经理还可以直观地看到哪些功能点可以轻松扩展,哪些优先级需要更新等等,甚至有助于估计和安排需求。使用统一本地缓存还提供了“可视化配置”的可能性。结合阿里巴巴内部的d i a m o n d或s w i t c h框架(轻量级交换机和动态配置项管理框架),您可以在不更新代码的情况下更新冲突优先级,只需推送配置,这为开发和测试提供了极大的便利。
idle fish server的应用基本上是基于s p r i n g框架的。为了便于在服务器应用程序中使用swak框架,在设计之初,我们要求swak与spri框架100%兼容。最终的实现版本实现了这一点。s w a k框架引入的业务b e a n和b e a n都完全由s p r i n g容器管理。该框架还使用CGLIB来表示上图中执行过程中的一系列过程。它完全由框架执行。它是完全透明的,对学生的发展不敏感。它的使用方式与普通的单一实现接口类似,如下面的代码块所示。
目前,swak框架已经应用于商品出版和编辑的一些过程中。我们正在积极将swak框架扩展到更多流程。下图显示了基于SWAK框架的商品领域核心功能的转换计划。基于swak升级后,闲置鱼类商品领域的核心功能根据业务进行隔离。每个商业发展专业的学生只需要与相应的商业发展相关。它的一般逻辑和业务隔离完全由基于swak框架的第一层和第二层保证。代码质量和开发效率将显著提高。
idle fish开发的swak多实现定期执行框架可以很好地解决平台代码与业务代码耦合严重难以分离、业务与业务交织的代码缺乏可拆卸性的问题。s w a k与s p r i n g 100%兼容,易于使用,使用快捷。实际上,SWAK框架就像一把瑞士军刀,可以应用于各种场景,小巧方便。当然,SWAK仍在不断发展,其特性和功能仍在丰富。同样,休闲鱼也有许多有趣和创造性的尝试。如果你感兴趣,请加入我们。
没有供应的闲置鱼类的做法是什么?如何做到这一点?游手好闲的鱼没有货源。闲置市场规模超过万亿。二手电子商务迎来了循环经济的红利。“校园圈”真的能成为游鱼生长的第二个引擎吗?如果闲置的鱼被恶意退回怎么办?开店时如何提高闲置鱼的暴露率?