`
阅读更多

"Dear, you love me, you just don't know you love me"是美国肥皂剧FRIENDS中的经典台词,中文翻译为《老友记》或者《六人行》,比较一下这句:"Programmer, you use FP, you just don't know you use FP",句式上和逻辑上是不是很相似?

现在我想说说FP,Functional Programming,中文翻译为函数式编程,与“命令编程”(例如 C、Pascal语言)中的惯常用法相对应,FP在和FORTRAN同样古老的Lisp语言中首次出现,我接触此概念在Python语言中(可爱的Python是相当好的专栏),现在我惊奇的发现它的一些惯用法又在VB.NET开发的DotNetNuke中出现。我猜测,写出DotNetNuke的程序员一定学过Lisp等函数式编程语言。

来看看这个:

''' -----------------------------------------------------------------------------
''' GetHtmlText gets the HtmlTextInfo object from the Database
'''		[cnurse]	11/15/2004	documented
''' -----------------------------------------------------------------------------
Public Function GetHtmlText(ByVal moduleId As Integer) As HtmlTextInfo

    Return CType(CBO.FillObject(DataProvider.Instance().GetHtmlText(moduleId), & 
GetType(HtmlTextInfo)), HtmlTextInfo) End Function

模块位于DotNetNuke_3.0.9\DesktopModules\HTML\HtmlTextController.vb中,我没有精选代码,只是随便找了一个,这种只有一行代码的函数在DNN总非常多。

函数式编程优点不说了,在可爱的 Python:Python 中的函数编程中说了很多了,缺点我认为就是太难理解,至少不直观,也许是我命令式编程接触的多有关吧,充分理解这种程序其实也简单——单步调试,多花时间而已,不过要注意,按F11逐语句而不是F10逐过程,要不然一眨眼就执行过去了,也就没得看了。

好了,这纯粹是按键+记录的体力活,在Return语句上设了断点后,F5,GO!相应的执行顺序为:

  1. DataProvider.Instance()
  2. SqlDataProvider.GetHtmlText(ByVal moduleId As Integer) As IDataReader
  3. DotNetNuke.Common.Utilities.CBO.FillObject(ByVal dr As IDataReader, ByVal objType As Type) As Object
  4. CType(CBO.FillObject(DataProvider.Instance().GetHtmlText(moduleId), GetType(HtmlTextInfo)), HtmlTextInfo)

好,执行完了,还是没看懂?正常,因为你的阅读速度太快了,如果你像我一样,花了10分钟走这个流程,然后再多看看代码,一定就半懂不懂了,好了,无论如何,我还是有点懂了:

1.DataProvider.Instance()获得的是数据库提供者的一个实例,设计模式Singleton,我发现DNN的数据库连接复用非常有效,有效的只有第一次启动的时候会创建,也就是调用CreateProvider(),然后除非你重新启动机器或者等待5分钟以上不去使用数据库连接,否则都不会再创建数据库连接了。

2.GetHtmlText纯粹的就是业务逻辑层中的概念,也是执行一行语句:

Return CType(SqlHelper.ExecuteReader(ConnectionString, DatabaseOwner & ObjectQualifier & 
"GetHtmlText", moduleId), IDataReader)

ExecuteReader在Microsoft.ApplicationBlocks.Data.SqlHelper中,动态生成查询,然后返回SqlDataReader,再转型成IDataReader接口,值得一提的是Microsoft.ApplicationBlocks.Data没有提供源代码,原因嘛,DNN在文档Data Access.doc中提到是enables us to upgrade the component seamlessly as new features/fixes become available,看不懂。

3.CBO是DNN中的精华,功能就是利用.NET中的反射机制,动态根据请求生成数据库返回数据集同新生成的.NET对象之间的同步数据,对于.NET对象没有任何要求,对于数据库返回记录要求支持IDataReader接口,其中数据库到.NET对象赋值在CBO.CreateObject,然而方向相反的.NET对象到数据库却还没有实现类似机制,采用的是类似

SqlHelper.ExecuteNonQuery(ConnectionString,DatabaseOwner & ObjectQualifier & 
"UpdateHtmlText", moduleId, desktopHtml, desktopSummary, userID)
那样的长长的对应每个类一个的机制,原因也许是.NET类库没有提供IDataWriter接口。

4.没啥说的了,转型而已,同C#中的(HtmlTextInfo)Object相同

通用的代码是否偏向于动态?同C/C++平台相比,更动态.NET是否更多的偏好函数式编程手法?

分享到:
评论

相关推荐

    DotNetNuke 操作中文 文档

    1. **网站管理员**:在 DotNetNuke 中,网站管理员是拥有最高权限的角色,负责整个站点的设置和管理。网站管理员文档可能涵盖以下内容: - **安装与配置**:如何下载、安装和配置DotNetNuke环境,包括IIS服务器设置...

    DotNetNuke

    ### DotNetNuke知识点详解 #### 一、DotNetNuke简介 **DotNetNuke**(DNN)是一款基于Microsoft .NET平台的开源内容管理系统(CMS)与应用开发框架,用于构建高度交互性的网站、社区门户以及企业级应用程序。自...

    精通DotNetNuke模块编程

    《精通DotNetNuke模块编程》是一本专为开发者准备的深入指南,旨在帮助读者掌握在DotNetNuke平台上进行高效、灵活的模块开发技术。DotNetNuke是一款开源的内容管理系统(CMS),基于.NET框架,提供了强大的网站建设...

    DotNetNuke6.25简体中文语言包

    在 DotNetNuke 中,语言文件通常是以资源文件(.resx)的形式存在,这些文件会被系统动态加载,根据用户的语言设置显示相应的文本。这个简体中文语言包确保了中国用户在使用 DotNetNuke 平台时,可以无障碍地理解和...

    DotNetNuke中文安装包_C#门户网站cms程序.rar

    5. **多语言支持**: 由于题目中提到了“中文安装包”,所以我们可以推断DotNetNuke支持多语言界面,便于不同地区的用户使用。它允许你轻松创建多语言站点,为全球用户提供服务。 6. **社区和生态系统**: DotNetNuke...

    ASP.NET-[CMS程序]DotNetNuke中文安装包04.06.02.zip

    它支持多种编程语言,如C#和VB.NET,提供了事件驱动的编程模型,使得开发者能够更高效地创建交互式网页。 2. **内容管理系统(CMS)**: 内容管理系统允许用户无需深入技术细节就能创建、管理和发布数字内容。...

    DotNetNuke(DNN) 7 中文语言包

    总之,DotNetNuke的中文语言包为中文用户提供了便捷的操作环境,使得DNN在中文社区中的应用更为广泛。对于那些希望利用DNN构建和管理中文网站的企业和个人来说,这个语言包是一个必不可少的组件。

    DotNetNuke简体中文推广版_C#门户网站cms程序.rar

    DotNetNuke的开发语言主要是C#,这是一款强大的面向对象的编程语言,是微软.NET框架的重要组成部分。C#的特性包括类型安全、垃圾回收、面向对象编程、丰富的类库支持等,使得DotNetNuke能够构建稳定且可扩展的Web...

    DotNetNuke04.08.03源码

    1. **阅读源码**:通过分析VB.NET源代码,了解DotNetNuke的工作原理,提升.NET编程技能。 2. **定制模块**:根据业务需求,开发新的功能模块,增强网站的实用性。 3. **扩展功能**:利用API接口和事件驱动机制,与...

    DotNetNuke_4.06中文安装版

    总的来说,DotNetNuke 4.06中文安装版提供了一套完整的解决方案,让不懂编程的用户也能搭建和管理功能丰富的网站。它利用了.NET Framework的强大功能,并结合了多语言支持,使得在全球范围内使用变得简单易行。通过...

    DotNetNuke7 简体中文语言包

    DotNetNuke(DNN)是一款开源的内容管理系统(CMS),基于.NET Framework开发,广泛用于构建企业网站、社区网络和电子商务平台。"DotNetNuke7 简体中文语言包"是针对DNN7版本的一个关键组件,它使得中国的用户能够以...

    DotNetNuke 5.0汉化包

    在 DotNetNuke 中,可以通过管理界面进行语言包的安装和配置,使得整个站点或特定部分呈现中文界面。 总之,"DotNetNuke 5.0汉化包"是为了解决中国用户在使用 DotNetNuke 平台时的语言障碍,通过替换和添加中文资源...

    DotNetNuke 5.0.0 源码包

    DotNetNuke(DNN)是一款开源的内容管理系统(CMS),基于.NET Framework开发,适用于构建企业级Web应用程序。这个源码包是DotNetNuke 5.0.0版本,是该平台的一个里程碑,包含了用于理解和学习DNN核心功能的重要代码...

    DNN中文语言包8.0.4版,DotNetNuke中文语言包8.0.4版

    ** DotNetNuke (DNN) 简介** DNN(DotNetNuke)是一个开源的内容管理系统(CMS),基于.NET框架,专为构建企业级Web应用程序而设计。它提供了丰富的功能,包括网站创建、内容发布、用户管理、模块化布局以及社区...

    DotNetNuke 皮肤开发指南中文

    ### DotNetNuke 皮肤开发指南中文 #### 简介 DotNetNuke (DNN) 是一款基于.NET框架的开源内容管理系统(Content Management System, CMS),它支持开发者和设计师们构建高度定制化的Web应用程序。皮肤(Skins)在DNN...

    [DotNetNuke 4高级编程].rar

    这本书《DotNetNuke 4高级编程》深入探讨了DNN的高级特性和开发技术,旨在帮助开发者充分利用这个平台的能力。尽管没有提供具体的标签,我们可以从书名推断出一些关键知识点。 1. **.NET Framework**: DNN是建立在...

    DNN(DotNetNuke)9.0.0中文语言包;DNN 9.0.0 language pack

    用了半年多的时间,陆陆续续翻译完了DNN(现在好像不用DotNetNuke了)9.0.0的语言包。翻译过程中,发现原英文语言有个别单词错误,看来出错难以避免。DNN是非常优秀的CMS,但是感觉现在关注的人少,网上的资料也很少...

    DotNetNuke 4.0模块开发第1部分

    综上所述,这份文档对于想要学习如何在DotNetNuke 4.0环境中开发自定义模块的开发者来说是非常宝贵的资源。通过仔细研读文档中的各个章节,开发者可以逐步掌握所需技能,进而创建出功能丰富的应用程序。

Global site tag (gtag.js) - Google Analytics