美文网首页
2018-11-06 插件化编程艺术

2018-11-06 插件化编程艺术

作者: liwen2015 | 来源:发表于2018-11-06 18:03 被阅读6次

动态导入
运行时,根据用户需求(提供字符串),找到模块的资源动态加载起来。

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

# test2.py
class A:
    def showme(self):
        print('I am A')


# test.py
if __name__  == "__main__":
    mod = __import__('test2')
    cls = getattr(mod, 'A')
    cls().showme()

importlib.import_module()
imprortlib.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('test2:A')
    a.showme()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I am A

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

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

加载的时机
什么时候加载合适?
程序启动的时候,还是程序运行中?
1.程序启动时
像pycharm这样的工具,需要很多组件,这些组件也可能是插件,启动的时候扫描固定的目录,加载插件。
2.程序运行中
程序运行过程中,接受用户指令或请求,启动相应的插件
两种方式各有利弊,如果插件过多,会导致程序启动很慢,如果用户需要时冉加载,如果插件太大或者依赖多,插件也会启动慢。
所以先加载必须的、常用的届件,其他插件使用时,发现需要,动态载入。
应用
软件的设计不可能尽善尽美,或者在某些功能上,不可能做的专业,需要专业的客户自己增强。比如Photoshop的滤镜插件。
Notepad++,它只需要做好一个文本编辑器就可以了,其它增强功能都过插件的方式提供。
拼与检查、HTML预览、正则插件等。
要定义规范,定义插件从哪里加载、如何加载、必须实现的功能等。

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


作者:米娅爸
来源:CSDN
原文:https://blog.csdn.net/qq_17782415/article/details/80412444
版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章

  • 2018-11-06 插件化编程艺术

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

  • 大三同学学习路线

    现阶段: js: dom编程艺术 jquerycss:bootstrap sass学会使用jq插件 下一阶段: j...

  • dynamo 1.3.1 for revit中文破解版软件免费下

    dynamo for revit 2017 2018是一个Revit参数化建模插件,它采用的一种节点的可视化编程方...

  • Web UI自动化框架对比

    自动化化框架简介功能支持编程语言自动生成代码插件环境要求社区活资料Puppeteer提供建立在DevTools协议...

  • 進无尽的简书目录

    代码组织及其相关的架构级别的文章 聊聊工程级别的组件化、插件化 以及 模块化聊聊程序设计思想之面向切面编程AOP聊...

  • RecyclerView,你为什么不回调 onScrolled

    RecyclerView 这个控件带来的插件化编程体验和良好的性能都在不断吸引大家使用 ta,github 上已经...

  • JS插件化开发

    为什么要插件化开发 插件化开发可以让我们拥有更高的拓展性和可读性,符合当今流行的“函数化”编程思想,便于多人合作编...

  • Android:插件化

    插件化组件化 组件化与插件化的区别 组件化是Android自然提供的,例如分成lib,test组件。插件化是热更新...

  • Android-第三方开源框架—插件化原理之Activity插件

    前言 四大组件的插件化是插件化技术的核心知识点,而Activity插件化更是重中之重,Activity插件化主要有...

  • Android插件化

    插件化与组件化的区别 插件化:插件化是把整个APP拆分成多个模块,这些模块有一个宿主和多个插件,每个模块都是...

网友评论

      本文标题:2018-11-06 插件化编程艺术

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