pyoc是python项目的ioc容器

PyoC的Python项目详细描述


简介

这是pyoc的groups页面。这个小组的目的是讨论pyoc中的新特性,并在项目中的用户和开发人员之间建立一个开放的渠道。

pyoc是python的ioc容器。它的目的是使管理组件之间的依赖关系更加容易(在python中已经很容易了)。它主要面向一种约定优于配置的方法。

PYOC体系结构

让我们试着理解pyoc是如何工作的,以及它背后的概念是什么。

首先让我们看一张超过一千字的图片!:)

http://farm4.static.flickr.com/3528/3289725178_cd201f8e85.jpg?v=0

在上图中,您可以看到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/

当前版本的文档:-

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java计时器结束得太早?   java通过行选择编辑jtable内容   java如何将数组的值传递给另一个类?   java对象。hashCode()算法   代号为1且lambda不工作的java Android本机代码   泛型Java方法签名中是否真的需要“?扩展”?   异常处理声纳问题“main”不应“抛出”任何JAVA 7   java无法使用MVEL导入静态方法   java什么是类路径容器?   java从InputStream解码字节   Eclipse重构仅限Java   java使用Qpid通过SSL与AMQP1.0代理通信   java有没有一种方法可以在Oracle中使用带有时区的时间戳作为函数输入   保存文件时运行安卓 lint的java出错   尽管添加了JScrollPane,java JList视图区域仍在增长   java计算第n个浮点   java如何在mysql中插入日期?   GWT中异步回调的java问题