to #8:思想就肯定不是原创了,IoC思想在其它语言中已经被应用很久了,Java和C#也已有很多IoC容器框架。至于具体到这个容器的编写上,除了配置方式参考了Spring外(因为个人觉得Spring的配置方式已经很灵活了),其它代码完全原创。
ioc、企业级。lz可否介绍一下应用场合?以及其它做法为什么不能胜任?
to 10#:其它做法也是可以胜任的,这并不是唯一的解决方案,但会是一个比较好的方案。籍由把对象的依赖关系配置化,可以更有效的降低对象间的耦合,实现组件的重用和增量式开发。例如说,我在开发项目A的时候,我可以先定好其业务的接口IBiz,然后实现这个接口ImplBizA;下次再做项目B的时候,我发现B跟A的业务是很像的,只是业务逻辑有一些区别,那么我只需要重写一个IBiz的实例ImplBizB,然后在配置中替换掉ImplBizA就完事了,可能连程序都不用重新编译。
to 14#我觉得IoC/DI最主要在解决组件重用和解耦这两个问题上比较出色,开始的时候可能确实要比拖控件多写不少代码,但是随着不断积累,便会越来越快。至于轻量级和重量级,就要看框架需要的资源,还有是否对程序的入侵性大来决定了。Java的低效不知道你是指开发效率低还是指运行效率低。前者的话我没有实际经历过,有朋友也对我这么说过,所以不发表太多意见;后者的话,应该是属于JAVA本身的问题了。在到业务是否复杂这点,就更加和框架、开发工具无关了,但是我觉得越是复杂的业务,就更应投入更多的资源在起始的地方,否则很可能在后面就慢慢地把项目做死了。相信你也见过很多代码看了谁都想骂的DELPHI程序吧,为什么有些公司会对DELPHI落得一种“不可靠,质量差”的印象,很大程度就是出在这。结构不好,修改困难,代码失控,就算改好了,测试也跟不上,品质自然就差了。它山之石,可以攻玉。我觉得Java和C#还是有不少可借鉴的地方的,尤其是在架构、开发模式这些地方(虽然技术细节可能有比不上DELPHI的地方),这是我这年来的体会。欢迎大家热烈讨论。
to 13#看漏了这个回帖了 -_- 有计划,但是D2010以下的版本实现起来,暂时还有点未串通的地方,可能到时还要向大家请教。另外很久前riceball写过个MeAop,是基于内存打洞来实现拦截的(他比较不屑用接口的这种方式,呵呵),最新版本是1.2。不知道现在在实际项目中应用得怎样呢?不过我个人比较喜欢接口的方式,虽然效率会低点,但是可以更好地应用一些设计模式,如代理模式。
@Harryfin 老大,还是被你抢先了一步啊~呵呵,我们目前正在准备Delphi Spring Framework的V0.2版本,IoC容器也初步完成了。过几天我也发布下,好听听大家的意见:)
EliteContainerD7没有包含源码?只有bpl?
to #30嗯,暂时只提供dcp和dcu,以后会考虑开放源代码,例如说比较完善之后。目前试用的话,引用dcp即可,例子基本已覆盖了主要功能,就差太懒没有补上个xsd,这个是应该提供的,呵呵。如果有疑问的话,我会在这里提供详细的回答。
1、无论使用或不使用BPL,都可以用Elite Container来构建你的程序(但不建议用纯DLL,因为各DLL中,同一个类的类型信息是不同的,不熟悉相关知识的话,有可能会带来一些问题,而这本身并不是Elite Container的问题)
2、支持多种属性注入类型,如直接值、枚举、集合、StringList、ObjectList等。其中StringList这种注入方式,在解决键值对配置时非常有用,详细请参看相关例子
3、支持构造函数注入。但由于Delphi的元信息不够完备,有时需要写一个构造函数调用类(写法很简单),才可让容器正确调用该类和其子类的构造函数,详细请看相关例子另外由于构造函数注入有可能会引起循环注入的问题,因此建议尽量使用属性注入来表达对象的依赖关系,不得已的时候才使用构造函数注入
4、支持对象配置的继承。省去配置子对象时,又要把父对象的属性配置重新拷贝一遍,既麻烦又难维护。
5、支持对象属性的自动注入。如果你的属性命名满足一定规则,便可以利用自动注入来省去大量的配置书写
6、支持配置文件的引入,提高配置文件的可重用性
7、支持多种对象的生命周期配置(对于无状态的管理类,如逻辑层,单例生命周期是最常用的)
8、支持对象的别名配置
9、增强的对象注册机制,可注册非TPersistent为基类的类(常见的如TInterfacedObject),并且容器可以区分不同单元的同名类
10、兼容使用Delphi的RegisterClass来注册类的遗留模块
11、大量的自定义插件扩展点。你可以自定义自己的属性注入配置方式、构造函数注入配置方式、对象配置引入方式、对象生命周期管理方式、对象属性自动注入方式等
12、支持对象的延迟创建。以免容器初始化时,会自动实例化一些需要花费大量时间来创建,而又很少用的类。
13、大量的可编程接口。你甚至可以自己写一个用INI、或数据库来进行配置的IoC容器! 借助Elite Container和Ioc思想,你可以更轻易地构建出具有松散耦合、重用度高的应用程序。它的核心思想就是拆分功能的接口和实现,上层只依赖于下层的接口,然后通过Elite Container的配置,把不同的实现类注入到该接口中,达到更换功能,也就是复用已有代码的目的。设计人员可以真正地发挥好自己的面向对象思想和相关设计模式,来架构企业级的应用程序,而无需象以前那样,在Delphi中用起面向对象总有点捉襟见袖的感觉。 DEMO下载地址:http://download.csdn.net/source/1891434
2、建立应用程序的领域(如对象实体、逻辑处理、接口服务等)
3、用XML文件来配置这些对象
4、引用elXMLConfigurateContainer单元,声明一个IelObjectContainer类型的接口变量
5、给这个接口创建一个TelXMLConfigurateContainer的实例,把这个XML文件的路径(相对或绝对路径均可,构造函数有参数指定),作为参数传入到构造函数中
6、TelXMLConfigurateContainer创建的时候,会自动初始化生命周期配置为"singleton",并且不是延迟创建的对象
7、现在可以根据配置文件所配置的对象ID或别名,从容器中获取已配置好的对象或接口了
8、调用所获取的对象或接口,来完成程序的功能
Bin\Config 各个例子所用到的配置文件
Lib 各个例子用到的dcp文件,需要在项目设置的"Build with runtime packages"中引入
Source 各个例子的源代码。共26个例子,用于详细介绍Elite Container的特性。请务必结合源代码、配置文件和可执行文件来理解,这样才能达到演示的目的。如果要编译例子源代码的话,请把Lib目录添加到Delphi的Library Path下,并修改下项目的输出路径。
harryfin老大,aop做了没
如果这样,开发的效率应该会提高很多啊
为什么java开发给人(至少是我)的感觉却是重量级很多,效率也非常低?
是它们的业务就很复杂?如果用delphi去做,要花更多的时间?平时得到印象一般都是:用delphi花200万能做的项目,用java做,一般都是要500-1000万以上。。(硬件的开销也高至少一倍)
只是没接触特别大的项目,不敢确认:这么大的复杂度下,delphi是不是根本无法胜任?还是仍然可以完成的很好至于拖控件,那是客户端的具体模块里的事情了
如果项目功能分解得好,模块间尽量独立,每个模块的开发效率高,也是好事系统架构当然很关键,它从来都是很重要的,但是与具体界面怎么实现,好像不冲突。只要能无限地扩展功能模块,方便是管理好这些模块,就是很好的架构了DELPHI的“不可靠,质量差”印象,感觉是写服务端代码时,容易遇到。个人感觉是string的方便的方面:内存管理容易被疏漏。还有一个是多线程的实现上,基本是不能太依赖控件,还是想vc一样采用api才会能避免问题。
线程TTHREAD类我觉得封装得还可以,
如果自己用API来写,如果不用和VCL对象交互,我觉得也没什么大问题,和VCL交互 Synchronize 就麻烦点, 用消息其实效率比较低的
老大,还是被你抢先了一步啊~呵呵,我们目前正在准备Delphi Spring Framework的V0.2版本,IoC容器也初步完成了。过几天我也发布下,好听听大家的意见:)
http://code.google.com/p/mesdk/
Ser_U ftp服务器 用delphi写的,不是很好吗
当然不是:delphi就写不出可靠、高本质的服务端程序
而是:不非常注意,仍然按客户端的快速方式开发,就很容易导致“不可靠,质量差”
这种动态配置对象的功能的确很重要! JAVA程序的部署有时候都需要专业的人员.另外
DELPHI封装了UI层和数据层. 两层中间的东西怎么写的都有.这也造成了 "DELPHI的“不可靠,质量差”印象,"