`
梁利锋
  • 浏览: 81719 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

DbEntry MVC 开发小记

阅读更多
  花了一周左右的时间,使用 DbEntry.Net 的 MVC 把 我的网站 重新设计了一下,同时也可以算是对 DbEntry.Net MVC 的一次实用性测试及升级。在这里记录一些感想。

  DbEntry.Net MVC 更像 Ruby on Rails,使用的脚手架方式也类似,以前我就觉得,脚手架是挺重要的,在这次开发中,也实际的感觉到脚手架的好处。事实上,直到现在网站已经上线运行,还有一些管理员功能是直接使用脚手架的。在敏捷开发中,数据Model可能随着开发进度的发展而发生变化,特别在开发初期,很多不确定因素会导致Model的变化,所以一个好的脚手架模块,应该是能尽量延迟其被实体化的时间,一旦其被实体化,数据Model的变化,就很可能导致这些代码的变化。所以,我觉得脚手架就不能是代码生成器,即使代码生成器可以作为“编译前事件”而做到每次Model的变化都得到表现,却很难判断是否用户修改过被生成的代码,用户修改过的代码被覆盖,会是一件很让人丧气的事。一般来说,Controller的脚手架代码不太需要修改,主要需要修改的是View,为了尽量增加脚手架View的生命周期,我为脚手架View增加了对于MasterPage的支持,虽然即使这样,脚手架的View看起来还是有些简陋,不过,至少是和整体网站的风格统一了,用户也可以看到和使用MasterPage里的链接,可以尽量等到Model之类的变量比较确定的时候,再加入定制的View。

  以前在 javaeye 的一个帖子 ruby on rails为什么暂时无法成为企业应用开发的主流? 里讨论说 RoR 似乎鼓励所有的代码都写到一个 controller 里,比如 javaeye 的 blog 就只有一个 controller,我曾回贴说可能 XP 开发的话,是否只有一个 controller 也无所谓,当然,我现在也还是认为 XP 开发的话,确实可以在很大程度上改善这种情况,不过,在这次开发中,我却觉得,是否所有功能都写在一个 controller 里,更多的是一个设计问题。在开始的一两天里,我确实也把很多功能都放在了 ArticleController 里,article/rss, article/category 等也看起来挺顺的,但是,它把 rss, category 的代码混入了 article,而只要改变为 rss/article 和 category/show,它的代码就被放在了另外一个 controller 里,而且,职责也更清晰,对 RssController 来说,支持 rss/comment 也更理所当然了。

  在这次网站的设计中,我第一次大量使用了 Static Page 方式。这是以前我为 DbEntry 设计的一个用于分页的算法,其源于使用搜索引擎的郁闷。很多时候,我们搜索一个东西,搜索引擎显示其链接,等我们点击进去后,却发现我们所在分页根本就没有我们要查的信息。原因在于,只要有新的文章不断加入,常用的分页算法对于特定文章的 PageIndex 将会发生变化,比如最早的文章,将会随着新文章的加入,而逐渐变为第二页、第五页、第二十八页……。而解决这个问题的方法,就是类似动态页面静态化的想法,最早的文章不应该是80页、90页,而总应该是第1页,最新的文章才应该是80页、90页。静态分页有一个问题,就是包含最新记录的页面可能不到 PageSize 那么大,如果显示在首页的位置,有时候会显得比较单薄,所以,在这次开发中,我增加了 Hybird 方式,首页使用传统分页,之后使用静态分页。

  说是网站重新设计,在于以前的数据库结构完全放弃了,在这次开发中 Model 完全由构想的使用方式决定,而跟老的数据库结构关系不大,比如,老的数据库结构是固定两层 Category,有 topic,有 keyword,而在新的数据库结构中,只有一层 Category,而把以前的第二层 Category 和 topic、keyword 都作为 Tag 处理。这当然导致数据库迁移显得比较麻烦,使用 DbEntry 的 BulkCopy,在一定程度上缓解了这个矛盾,对于 BulkCopy 来说,需要编写的是针对源数据库的 SQL 语句,目标数据库的 SQL 语句是由 BulkCopy 自动根据目标数据库类型生成的,所以我仍然可以使用一份代码,从源数据库生成 sqlite 数据库用于开发,生成 Firebird 数据库用于部署。不过,因为 Firebird 使用的是序列方式产生主键,而 BulkCopy 不涉及 ORM,所以它不会去操作序列,虽然不需要像 Sql Server 插入主键那样调用 SET IDENTITY_INSERT ON,但是却需要在导入数据后,重新设置序列,以便其能正确的产生主键,我使用的方法可能笨一点儿,就是用 max(id) 取得最大 id 值,再多次调用 select 去取相关序列,反正速度挺快的,应该也不需要多聪明的方法吧。不过也发现在 Firebird 上用 ExecuteNonQuery 调用 select 取序列的话,根本不会执行......

  网站的 footer 上,写上 Powered By DbEntry.Net,感觉挺爽的,考虑稍微修改一下许可协议,如果有项目要使用 DbEntry.Net 的话,也要在经常能见到的地方写上 Powered By DbEntry.Net
1
0
分享到:
评论

相关推荐

    DBEntry开发DLL

    DBEntry开发DLL是一个关于创建和使用数据库访问库的议题,主要关注的是DBEntry,这是一个轻量级的对象关系映射(ORM)框架。ORM框架在软件开发中起着至关重要的作用,它允许开发者使用面向对象的方式来操作数据库,...

    DBEntry.Net 参考手册

    DbEntry.Net (Lephone Framework) is a lightweight, high performance ORM compnent for .Net 2.0 and 3.5. It has clearly and easily programing interface. It based on ADO.NET, and supported C#, Visual ...

    DbEntry 4.0 帮助手册

    DbEntry 4.0 最新的帮助手册 DbEntry 4.0 最新的帮助手册

    DbEntry 3.5 文档, 代码, 工具, 源码

    在DbEntry 3.5版本中,这个框架进一步优化了性能和易用性,为开发人员带来了诸多新特性和改进。以下是关于DbEntry 3.5的一些关键知识点: 1. **ORM(对象关系映射)**: DbEntry 是一个基于.NET的ORM框架,它允许...

    DbEntry.Net3.9参考手册.chm

    DbEntry.Net是作者(梁利锋)设计的一个轻量级的 .Net ORM (Object Relational Mapping) 数据访问及 WEB 框架。对于 ORM 和 Sql 调用,它都拥有清晰和易用的 接口,目前支持 SqlServer、SQLite、MySql、Access、...

    DbEntry.Net4.1教程

    对于 WEB 开发,它既支持 ASP.NET 2.0 的 DataSource 方式,也支持 Ruby On Rails 风格的 MVC 方式。 目前,数据库部分已经支持多主键、多表联合查询、快速分页、隐式数据库事务、连贯API查询、ActiveRecord风格...

    DbEntry原版文档2003.doc

    DbEntry.Net是一个数据库访问框架,主要用于简化.NET应用程序与数据库之间的交互。这个框架提供了一种面向对象的方式来操作数据库,使得开发者可以更加便捷地进行CRUD(创建、读取、更新、删除)操作。以下是对...

    dbEntry数据库操作通用类安装包

    总的来说,"dbEntry数据库操作通用类安装包"是一个强大的数据库操作工具,它简化了开发流程,提高了开发效率。通过深入学习其提供的文档和示例,开发者可以充分利用它的功能,实现高效且可靠的数据库管理。

    DbEntry.Net v3.6 帮助手册(chm格式)

    DbEntry.Net (Lephone Framework)是一款轻量级的.Net数据持久化框架。这是一本官方权威的帮助手册。

    dbEntry数据库操作通用类样例

    这个“dbEntry数据库操作通用类样例”提供了一种高效、可复用的方式来处理SQL查询和事务,以提升开发效率。 `dbEntry`类通常包含以下关键功能: 1. **连接管理**:`dbEntry`类会管理数据库连接的打开和关闭,以...

    Blog:这是我的网站使用的源代码,可以作为一个使用 DbEntry.Net 开发实际项目的例子

    MyBlog 简介 这是 使用的源代码,可以作为一个使用 开发实际项目的例子。 因为是我自己用的,所以有...关于 DbEntry 部分,缺省是 SQLite 1.0.66.0 用于开发,Firebird 2.5.2 用于部署,具体的配置可以参见 DbEntry 的

    dotnet-DbEntryNet是一种轻量级高性能的Net的ORM组件

    DbEntry.Net就是这样一个专门针对.NET平台设计的轻量级、高性能的ORM组件,它为开发者提供了简洁、高效的数据库操作方式,大大提升了开发效率。 DbEntry.Net的核心特性在于其轻量级的设计。相比于其他大型ORM框架,...

    C#语言Framework4.0下MVC4 Web应用Demo

    使用C#写成的MVC4 Web应用测试工程,开发环境VS2012+SQL Server2012。资源包含生成数据表的SQL文件,对各种常见数据进行了综合测试。数据层Model模型使用DBEntry构建,视图View采用aspx引擎。利用MVC模式,通过控制...

    轻量级的 .Net ORM DbEntry.zip

    对于 WEB 开发,它既支持 ASP.NET 2.0 的 DataSource 方式,也支持 Ruby On Rails 风格的 MVC 方式。支持 Linq 方式的查询,也提供一个简单的 IoC。 目前,数据库部分已经支持多主键、多表联合查询、快速分页、隐式...

    DbEntry.Net-开源

    DbEntry.Net是一个专门为.Net平台设计的数据库访问组件,它的核心目标是简化数据库操作,提高开发效率。这个开源项目提供了一套全面的API,允许开发者通过不同的方式与关系型数据库进行交互,包括使用SqlSentence、...

    连接数据库进行操作的通用类

    根据给定的信息,本文将详细解释“连接数据库进行操作的通用类”的主要功能与实现细节。此通用数据库访问类提供了一系列方法,用于处理常见的数据库操作,例如查询、更新等。 ### 类名:`dtaccess` ...

    .net版本的Wiki

    在这个压缩包中,我们看到两个与许可证相关的文本文件:DbEntry.License.txt和VisualWiki.License.txt。这些文件通常包含软件的授权信息,比如软件的许可协议类型(如MIT、Apache 2.0、GPL等)以及对软件使用、修改...

Global site tag (gtag.js) - Google Analytics