美文网首页
35.2-插件化开发和接口

35.2-插件化开发和接口

作者: BeautifulSoulpy | 来源:发表于2020-01-14 07:55 被阅读0次

人穷时简单,富了复杂;落魄时简单,得势了复杂;看自己简单,看他人复杂。世界,其实很简单,只是人心很复杂;人心,其实也很简单,只是利益分配很复杂;利益分配其实也很简单,只是社会关系很复杂。人一简单就快乐,而快乐的人却寥寥无几;人一复杂就痛苦,可痛苦的人却比比皆是!

1. 插件化开发思想

软件的设计不可能尽善尽美,或者在这个功能上,不可能做的很专业,需要专业客户自己去增强;

动态导入

运行时,根据用户需求(提供字符串),找到模块的资源动态加载起来。
1、 内建函数_import_()

__import__(name, globals=None, locals=None, fromlist=(), level=0)

name,模块名
import语句本质上就是调用这个函数。但是不鼓励直接使用它。建议使用 importlib.import_module() 。
sys = _import_('sys') 等价于 import sys

# t2.py
class A:
    def showme(self):
        print("I am A")

# 主程序模块t.py
if __name__ ==  '__main__':
    mod = __import__('t2')
    cls = getattr(mod,'A')
    cls().showme()

2、importlib.import_module()
importlib.import_module(name,package=None)
支持绝对导入和相对导入,如果是相对导入,package必须设置。

# test2.py
class A:
    def showme(self):
        print('I am A')
        
# 主程序模块test.py
import importlib

def plugin_load(plugin_name:str, sep=":"):
    m, _, c = plugin_name.partition(sep)
    mod = importlib.import_module(m)
    cls = getattr(mod, c)
    return cls()

if __name__ == '__main__':
    # 装载插件
    a = plugin_load('test1:A')
    a.showme()

上面的例子就是插件化编程的核心代码。

2. 插件化编程技术

依赖的技术
反射:运行时获取类型的信息,可以动态维护类型数据
动态import:推荐使用importlib模块,实现动态import模块的能力
多线程:可以开启一个线程,等待用户输入,从而加载指定名称的模块

加载的时机
什么时候加载合适?
程序启动的时候,还是程序运行中?

  1. 程序启动时(全部加载)
    像pycharm这样的工具,需要很多组件,这些组件也可能是插件,启动的时候扫描固定的目录,加载插件。
  2. 程序运行中(动态加载)
    程序运行过程中,接受用户指令或请求,启动相应的插件;

3. 接口和插件的区别?

接口是规范的定义,往往是暴露出来的功能,例如模块提供的函数或方法,加载模块后调用这些函数完成功能。接口也是一种规范,它约定了必须实现的功能(必须提供某名称的函数),但是不关心怎么实现这个功能。
插件是把模块加载到系统中,运行它,增强当前系统功能,或者提供系统不具备的功能,往往插件技术应用在框架设计中。系统本身设计简单化、轻量级,实现基本功能后,其他功能通过插件加入进来,方便扩展。

相关文章

  • 35.2-插件化开发和接口

    人穷时简单,富了复杂;落魄时简单,得势了复杂;看自己简单,看他人复杂。世界,其实很简单,只是人心很复杂;人心,其实...

  • Android热修复总结

    插件化和热修复是Android开发较为高级的知识点,是中级开发人员通向高级开发中必备知识点,插件化知识:插件化。下...

  • Android热修复总结

    插件化和热修复是Android开发较为高级的知识点,是中级开发人员通向高级开发中必备知识点,插件化知识:插件化。下...

  • Android组件化和插件化开发

    Android组件化和插件化开发 什么是组件化和插件化? 组件化开发 就是将一个app分成多个模块,每个模块都是一...

  • Android组件化和插件化开发

    Android组件化和插件化开发 什么是组件化和插件化? 组件化开发就是将一个app分成多个模块,每个模块都是一个...

  • Android热修复技术总结

    插件化和热修复技术是Android开发中比较高级的知识点,是中级开发人员通向高级开发中必须掌握的技能,插件化的知识...

  • Android插件化(一)

    插件化(一) 组件化和插件化的区别: 组件化是将一个app分成多个模块,每个模块都是一个组件(module),开发...

  • 插件化与组件化开发

    1.插件化 [Android] 开发资料收集:动态加载、插件化、热修复技术 2.【转】Android插件化从入门到...

  • 插件化介绍和原理解析

    什么是插件化 首先我们区分一下组件化和插件化的概念 组件化组件化开发就是将一个app分成多个模块,组件化强调功能拆...

  • 推荐文章

    JavaJava中有关Null的9件事 AndroidAndroid组件化和插件化开发Android 组件化 ——...

网友评论

      本文标题:35.2-插件化开发和接口

      本文链接:https://www.haomeiwen.com/subject/ryekactx.html