ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

干货:插件

干货:插件 插件 策略模式TEMPLATE_ID/PRIORITY/recognizes/parse 四要素不写进 if-else写进文件加一种新的 PDF 格式最省事的写法是往解析函数里塞if 是格式A: ... elif 是格式B: ...。但格式一多核心代码就成了一滩浆糊而且每次改格式都要动核心、都要重新发布。第一性原理把同族行为抽象成策略每个策略一个文件核心只负责调度不负责具体格式。这就是策略模式Strategy。插件四要素我们每个插件文件固定实现四个东西classPlugin:TEMPLATE_ID1002# #1 唯一ID路由用PRIORITY1# #2 优先级数字小优先defrecognizes(self,pdf):# #3 自动判据给个pdf能认吗...defparse(self,pdf):# #4 真正解析返回标准记录...导入时通过__init__.py统一加载扫描 plugins 目录里的每个文件收集这四要素。为什么这是插件因为核心代码不看你字节是什么格式它只认这四个口。你新加一个格式 在 plugins 目录丢一个新 py 文件定义好这四样核心零改动。以 1002 插件为例recognizes是这样认的defrecognizes(self,pdf):firstpdf.pages[0].extract_text()orreturn(Lot No.infirst)and(Item(unit)infirst)判定谁认知谁两个职责分开recognizes自动模式下逐插件试谁True用谁。TEMPLATE_ID显式模式下HTTP 带 template按 ID 直接锁。一句话策略模式 让新增变体变成加文件而不是改核心。识别逻辑这种高度因格式而异的活天生适合插件化。四个口子定死剩下的自由发挥。
返回列表