在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
很久没来这里写文章了。最近抽空就在参与一个博客发布系统的整体设计,小弟不才,所以希望大家能够拍砖,另外非常期待高手进来,带领我们一起完成这个项目。
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/ 主要是对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 |
请发表评论