DevText设计思考(求NHibernate Asp.net mvc牛人)
很久没来这里写文章了。最近抽空就在参与一个博客发布系统的整体设计,小弟不才,所以希望大家能够拍砖,另外非常期待高手进来,带领我们一起完成这个项目。
DevText的概要设计说明
一:开发环境:
Visual Studio 2010
SQL Server 2008
Asp.net MVC 2
二: 项目设计目的:
项目目的是为了让大家能够有一个 好用的中文博客发布系统。同时能够通过这个项目,学到一些新的技术使用和设计模式。
最终的博客系统将会是一个扩展性强,容错性好的系统。
三: 整个系统的架构:
最底层是asp.net 和.net的framework,上面是我们要使用到的几个工具或框架。
Asp.net Mvc就不用说了,它是一个很好的Web开发平台,能够让整个Web系统的结构更加明了。
NHibernate是一个ORM工具。它相对于EF更加成熟,性能也比较好,所以我们选择它作为ORM工具,让我们访问数据库的部分灵活,快捷。
Autofac是一个比较好用的IoC Container。使用它是为了让我们的整个项目在以后维护阶段更加容易修改。
Microsoft.Data.Entity.CTP使用它主要是为了能够使用’Code-First’模式来创建数据模型,数据库。 而不需要和传统的那种模式,必须先创建数据库才能运行程序。
DevText Framework部分介绍:
此部分是整个项目的核心模块了。所有的模块用到的接口都会在这里定义。它是所有Widget的依赖模块。除了所有的接口以外,Cache的管理,系统设置,log模块,Error处理模块,Mvc的扩展,Theme管理,Widget的管理,ViewEngine的扩展,MVC扩展等。
整个framework部分主要分为三部分,如上图所示。
左边主要是Asp.net Mvc的扩展功能等,Action处理,Controller扩展,路由扩展等。
中间部分又可以分为两块,一部分是上面整个系统的日志,错误处理,缓存管理,后台任务管理,系统设置等。另一部分是主要的接口部分,IEntity和IRepository以及Unit work是数据访问本分的核心。
右边部分就是几个管理模块了。皮肤,Widget,Email,Script等等。
下面部分就是我分开,一个模块一个模块给大家说明下每一部分如何实现。
1. Cache模块的实现。
Asp.net自带的Cache机制就是不错的,但是我们为了能够让整个Cache模块的测试比较容易,需要扩展asp.net的cache机制。
编写这部分代码的人员建议参考上面的文章,或者把它集成到项目中来。
2. Log模块,这部分建议使用Castle. Windsor里面的logging facility结合好的logger项目(例如:log4net)来完成。
参考例子:http://stw.castleproject.org/Windsor.Logging-Facility.ashx
3. HandleError模块
之前给大家推荐过使用Elmah来记录系统的错误,每个好的系统都需要记录下来用户访问时系统的错误,以方便以后的系统的完善。
Elmah是我100分推荐的一个记录错误的工具。这里需要注意区分log和Errorhandle模块。
4. Setting模块
Blog的名称,logo,每个页面显示的记录条数,皮肤的设置等等都需要在Setting模块来完成。
5. Validation模块:
很多类或者方法中都是需要先去验证是否值为空,那么这个验证值为空的方法我们就在Validation模块中放着,而且设置为static类型的。方便以后的验证工作。
6. Navigation模块
这个模块也就是blog后台管理的菜单部分。期望的结果是当我新增一个Widget后,可以设置widget在blog后台管理菜单的显示位置。
7. Task模块
有时候很多博客是设置为某个时间时发布,这样就需要一个Task模块来处理它的发布时间。
8. IWidget模块
Widget是为了能让系统的扩展性更强,所以在Framework部分我们只去定义了它的接口IWidget,它主要包含了这个Widget的名字,作者,版本,以及查看它的权限等。 每个Widget都会去继承它,每个Widget可以是一个单独的项目,Widget的显示内容通过Widget中的Controller部分来完成。
9. IEntity ,IRepository,IUnitOfWork
之前我说过希望数据访问部分是和整个Framework分开的,所以在Framework中我们只去定义好这几个接口,数据访问部分会是一个单独的project。
这样做的好处是:可能大家有的想使用NHibernate来做ORM工具,有的想使用Entity Framework等等。
参考: http://www.n-pei.com/blog/devtextdesign1
下面部分将会是管理模块的介绍 :)
10. Email Manager模块
当用户注册后,应该能收到一封邮件,忘记密码时,以及有评论回复时都应该能收到邮件,所以这个模块算是一个基础模块。
它不仅要发送邮件,邮件内容会有模板文件(.txt文件)。
11. FileManager模块
此模块需要实现的功能主要有对文件类型的判断,例如,我们要求上传的图片只能是jpg,png和gif的,当用户上传的图片是其它类型的就不能接受,使用string.format来拼img控件等。以及下载文件的link等,只要涉及到文件和图片操作的通用方法都可以放在这里。
12. ScriptManager模块
此部分主要实现的功能是能够能很容易的把jQuery部分添加到页面。(目前还没有很好的思路。。。。- -!)
13. ThemeManager模块
ThemManager模块实现的功能是能够找到所有的Theme所在路径,以及一些Theme部分的接口,我们会在DevText.Core部分实现Theme的功能,Thememanager会给我们提供一些基础的接口等。
14. WidgetManager模块
Widget扩展功能的管理模块,使用Extension Manager Framework来实现的import功能,它能够通过扫描Widget所在目录,把每个Widget中的dll封装到一块,成为一个新的dll。映射到bin目录下。算是比较核心的一个模块。
以下部分是MVC 相关的部分
15. MVC Extension 模块:
所有的扩展都在这里放着,HTMLhelper的扩展,Controller的扩展等等。
16. Action Filter模块
参考:1) http://aleembawany.com/2009/03/27/aspnet-mvc-create-easy-rest-api-with-json-and-xml/
2) http://weblogs.asp.net/omarzabir/archive/2008/10/03/create-rest-api-using-asp-net-mvc-that-speaks-both-json-and-plain-xml.aspx
3) http://www.alexthissen.nl/blogs/main/archive/2008/07/01/health-monitoring-action-filter-for-asp-net-mvc.aspx
4) http://www.codeproject.com/KB/web-cache/mvcresultcache.aspx
5) http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_Filters.aspx
6) http://kigg.codeplex.com
7) http://www.iansuttle.com/blog/post/ASPNET-MVC-Action-Filter-for-Localized-Sites.aspx
主要是对asp.net mvc action filer的一些扩展应用
17. Action Result模块
可以自定义一些ActionResult,比如文件的下载自定义:
http://john-sheehan.com/blog/another-asp-net-mvc-custom-actionresult-example/
18. Command和CommandBinding模块
主要是扩展Asp.net mvc的model binding模块。参考:
http://www.hanselman.com/blog/IPrincipalUserModelBinderInASPNETMVCForEasierTesting.aspx
19. AppController模块
所有的Controller都会继承这个基本的Controller,它继承了Asp.net默认的Controller。
DevText.Core部分设计说明
上面介绍了DevText的framework部分,接下来的部分是核心模块部分。
什么是核心模块?Core部分是整个blog系统正常运行的基本模块(s),例如:navigation,homepage,Localization,XmlRpc,Feed,blog,Comment,Dashboard等。
Widget扩展部分
最后就是我们的widget扩展部分,基本的有归档,标签,搜索,个人信息,练习信息。
创建每个Widget都是一个空的asp.net mvc project,如下图:
以后有新的Widget需要加入时,可以放进来。
如果你熟练NHibernate,Asp.net mvc或者是jQuery,欢迎加入QQ群:111497879 或者发送邮件到:[email protected]
Nick