pyoc是python项目的ioc容器
PyoC的Python项目详细描述
简介
这是pyoc的groups页面。这个小组的目的是讨论pyoc中的新特性,并在项目中的用户和开发人员之间建立一个开放的渠道。
pyoc是python的ioc容器。它的目的是使管理组件之间的依赖关系更加容易(在python中已经很容易了)。它主要面向一种约定优于配置的方法。
PYOC体系结构
让我们试着理解pyoc是如何工作的,以及它背后的概念是什么。
首先让我们看一张超过一千字的图片!:)
在上图中,您可以看到pyoc的两个主要方面。
第一个是配置,它负责确保容器理解您的依赖项。如图所示,您可以使用更方便的配置工厂。pyoc附带inplaceconfig和fileconfig(从0.1版起)。
第二个是依赖关系解析。ioc容器的好处是它可以为您处理枯燥的基础架构代码,例如实例化类、管理它们之间的依赖关系等。它还支持更高级的场景,您可以在不更改代码的情况下将一个实现热交换到另一个实现。
让我们在图片中绘制给定的依赖关系图。它将大致转换为以下代码:
class A(object): def __init__(self, b, c, d): #assigns and does something class B(object): def __init__(self, e): #assigns and does something class C(object): def __init__(self, e): #assigns and does something class D(object): def __init__(self, f): #assigns and does something class E(object): def __init__(self, g): #assigns and does something class F(object): def __init__(self, h): #assigns and does something class G(object): def __init__(self, some_param): #assigns and does something class H(object): def __init__(self, some_param): #assigns and does something
哇,那是个很深的结构。嗯,不完全是。如果您真正深入了解组件在应用程序中的交互方式,您很快就会意识到这是一个非常简单的表示。不过,让我们创建一个类a的实例。
a = A(b, c, d)
嗯…等等…我们还没有B,C和D。让我们改进一下来创建它:
b = B(e) c = C(e) a = A(b, c, d)
Ops,我们没有E…你知道我要去哪里,对吧?
下面是获取a:
h = H("some message") f = F(h) d = D(f) g = G("some message") e = E(g) b = B(e) c = C(e) a = A(b, c, d)
看起来不太好,是吗?如果你能做到:
a = IoC.resolve(A)
那可不是魔法,我的朋友。那是派克。上面看到的是依赖解析的工作机制。pyoc可以创建实例并根据您所做的配置为您填充它们的依赖项。
等等?什么?哦,你说得对!我从来没有显示任何配置。
让我们检查上述场景的inplaceconfig:
config = InPlaceConfig() config.register("b", B) config.register("c", C) config.register("d", D) config.register("e", E) config.register("f", F) config.register("g", G) config.register("h", H)
“你开玩笑吧?“。” 不是真的,亲爱的读者。差不多了。只要类使用register函数的第一个参数中指定的属性名作为其构造函数中的参数名,就可以了。
我知道这很难消化。更多的博客文章/文档即将发布。
现在查找示例的最佳位置是您可以在源代码中找到的测试用例。
项目备忘单
谷歌项目组页面-http://groups.google.com/group/pythonioc
项目约定:http://groups.google.com/group/pythonioc/web/conventions
链接和博客文章:http://groups.google.com/group/pythonioc/web/Links%20and%20Blog%20Posts
项目JIRA(发布和版本管理)- http://jira.stormwindproject.org:8080/browse/PYOC
项目Subversion服务器:http://svn.stormwindproject.org/svn/PyoC/Trunk/(svn co http://svn.stormwindproject.org/svn/PyoC/Trunk/ PyoC)
pypi页:http://pypi.python.org/pypi/PyoC/
当前版本的文档:-