DevText设计思考

DevText设计思考(求NHibernate Asp.net mvc牛人)

很久没来这里写文章了。最近抽空就在参与一个博客发布系统的整体设计,小弟不才,所以希望大家能够拍砖,另外非常期待高手进来,带领我们一起完成这个项目。

 

DevText的概要设计说明

一:开发环境:

Visual Studio 2010

SQL Server 2008

Asp.net MVC 2

二: 项目设计目的:

项目目的是为了让大家能够有一个 好用的中文博客发布系统。同时能够通过这个项目,学到一些新的技术使用和设计模式。

最终的博客系统将会是一个扩展性强,容错性好的系统。

三: 整个系统的架构:

clip_image002

最底层是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扩展等。

clip_image003

整个framework部分主要分为三部分,如上图所示。

左边主要是Asp.net Mvc的扩展功能等,Action处理,Controller扩展,路由扩展等。

中间部分又可以分为两块,一部分是上面整个系统的日志,错误处理,缓存管理,后台任务管理,系统设置等。另一部分是主要的接口部分,IEntity和IRepository以及Unit work是数据访问本分的核心。

右边部分就是几个管理模块了。皮肤,Widget,Email,Script等等。

下面部分就是我分开,一个模块一个模块给大家说明下每一部分如何实现。

1. Cache模块的实现。

Asp.net自带的Cache机制就是不错的,但是我们为了能够让整个Cache模块的测试比较容易,需要扩展asp.net的cache机制。

这里推荐一个比较好的例子:http://weblogs.asp.net/pglavich/archive/2010/10/13/caching-architecture-testability-dependency-injection-and-multiple-providers.aspx

编写这部分代码的人员建议参考上面的文章,或者把它集成到项目中来。

2. Log模块,这部分建议使用Castle. Windsor里面的logging facility结合好的logger项目(例如:log4net)来完成。

clip_image005

参考例子: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://haacked.com/archive/2008/05/10/writing-a-custom-file-download-action-result-for-asp.net-mvc.aspx

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等。

clip_image007

Widget扩展部分

最后就是我们的widget扩展部分,基本的有归档,标签,搜索,个人信息,练习信息。

clip_image008

创建每个Widget都是一个空的asp.net mvc project,如下图:

clip_image010

以后有新的Widget需要加入时,可以放进来。

如果你熟练NHibernate,Asp.net mvc或者是jQuery,欢迎加入QQ群:111497879 或者发送邮件到:nic162534@gmail.com

Nick

原文地址:https://www.cnblogs.com/Leo_wl/p/1881340.html