回答
有一段时间,试图想象个人电脑的硬件市场之前 Windows。例如,在那些日子里,每个应用程序都需要有自己的驱动程序。这意味着如果一台打印机没有驱动程序,可以使用WordStar和Lotus 1-2-3,这在办公环境中几乎没有用处。如果您的打印机可以与这两种应用程序一起工作,但您现在还想从Harvard Graphics输出?您需要确保应用程序本身知道如何处理您的特定打印机。
也就是说,ñ应用和中号打印机意味着需要ň × 中号驱动程序。
在Windows环境下,硬件制造商可以为Windows编写驱动程序,只要应用程序知道如何通过Windows提供的接口与打印机通信,则无需了解特定硬件的任何信息。
这使硬件和软件都更便宜。具体而言,应用程序员不需要知道存在的特定硬件。而且,在应用程序编写时并不存在的硬件如果通过相同的驱动程序接口进行通信,仍然可以与应用程序一起使用。
当然,这是一个相当简化的情况。即使使用DOS,也有ESC/P,PCL,当然还有PostScript,所以它不像每台打印机都是独一无二的,但应用程序仍需要了解这些细节。
这里情况类似。知道如何与DBI交谈的Perl应用程序大多不需要关注每个特定数据库的大部分各种细节。为Perl程序提供特定的数据库只需要为其编写合适的DBD::*模块。从DBI documentation下图说明了这一点:
|<- Scope of DBI ->| .-. .--------------. .-------------. .-------. | |---| XYZ Driver |---| XYZ Engine | | Perl | | | `--------------' `-------------' | script| |A| |D| .--------------. .-------------. | using |--|P|--|B|---|Oracle Driver |---|Oracle Engine| | DBI | |I| |I| `--------------' `-------------' | API | | |... |methods| | |... Other drivers `-------' | |... `-'
一旦DBI
是存在的,写,或使用对于给定的发动机的特定的专用模块的激励减小。当然,让一个独立的模块与某个地方的发动机单独通信可能会有一定的好处,但这些好处必须与成本进行权衡。其应用程序需要数据库访问的程序员需要了解不熟悉的API的来龙去脉。如果访问ABC
引擎的唯一方式是通过DBI
以外的其他方式访问,那么ABC
引擎不允许程序员利用他们已知的内容。使用ABC
引擎的专用API的应用程序无法与其他引擎一起使用,或者应用程序员必须使用自己的独立于数据库的接口并对其进行编程,并将DBD
复制到DBI
层。但是,如果已经有一个建立的数据库独立接口及其伴随的数据库驱动程序,为什么还要这么做呢?
看看的DBIx::Class发动机特定部分和想象有更多的工作它本来如果我们没有已经为每个引擎的DBD
。然后,想象一下,如果Rose::DB也必须重复整套驱动程序。
或者,您可以想象如果每个家庭都有其首选类型的墙上插座并且每个电器都有自己的首选电源插头,会发生什么情况。每台笔记本电脑都可以有自己的变压器,但我们都可以从标准插头和插座中获益,从中可以抽出电力。 DBI
位于插件和插座级别。
- 1. 没有访问数据库的Perl DBI
- 2. ContentProvider是提供数据库访问的唯一干净方式
- 3. Perl DBI取数据库的一部分?
- 4. 加速使用Perl和DBI访问MySQL数据库
- 5. ADO.NET是访问.net中数据库的唯一本机方式吗?
- 6. Perl DBI:返回唯一时间戳
- 7. C和/或C++的数据库访问库是否有与Perl的DBI类似的接口?
- 8. Perl DBI常量 - 如何访问?
- 9. Perl DBI fetchrow_array问题
- 10. 了解perl阵列中的引用和数据访问方式
- 11. 从DBI访问Apache :: DBI
- 12. 使用Perl DBI从表中读取一行一列的数据
- 13. 访问MySQL数据库使用Perl DBD:ODBC
- 14. 如何从Perl访问Oracle数据库?
- 15. 从silverlight访问oracle数据库的最佳方式是什么?
- 16. 使用Ruby访问SQLAnywhere 12数据库(DBI或SQLAnywhere gem)
- 17. Perl的DBI fetchall_hashref
- 18. 帮助使用perl dbi并创建唯一的输出文件
- 19. Perl中的数组访问器方法
- 20. Perl Parallel ::具有DBI数据库处理程序的ForkManager
- 21. Perl的DBI数组 - 拆分
- 22. 访问数据库中的未知数据库格式
- 23. 问题在Windows中安装perl DBI-mysql
- 24. 从另一个数据库访问方法中调用数据库访问方法
- 25. RavenDB,存储嵌入式数据库的唯一方法是在'系统数据库'中?
- 26. 编写访问数据库的方法的最佳方式是什么?
- 27. 帮助使用perl dbi与mysql来查询远程数据库
- 28. Perl DBI连接到PostgreSQL不会死()数据库错误
- 29. 如何使用Perl和DBI连接到Lotus Notes数据库(* .nsf)?
- 30. 如何从Perl MySQL DBI句柄获取数据库名称?
http://stackoverflow.com/questions/3419468/perl-modules-mysql-vs-dbi – Prix 2013-04-10 23:24:50
你只是好奇,还是有问题与DBI,你想解决? – Barmar 2013-04-10 23:33:13
只是好奇。我觉得没有任何东西令人惊讶。如果有人能够解释为什么没有可能......那很有趣。 – user632942 2013-04-10 23:36:12