一、领域模型

我们先看领域模型,这个app中主要的对象是“下载项”,它表示下载的文件:

注意,我们给这个下载项随便取了一个名字 FileItem ,名称是可以随便取的,但我们给他打了一个批注(attribute):["DownloadItem"] ,这个批注表示,FileItem 对象会保存在数据库的 DownloadItem 表中,为什么这么做?纯粹是演示一下ORM的映射功能(对象和表之间的映射),呵呵。

另外,最好给app中的主要数据实现 IAppData 接口,方便以后集成评论功能、脚印功能、tag功能。不实现这个接口,评论什么的都要自己写,会麻烦很多。

二、控制器

先看一下入口controller:

作为app的一部分,每一个控制器,都必须打上一个 [App(type)] 批注(attribute),指明这个控制器属于哪个app。


对于多实例的程序,这个批注是必须的,比如在我的空间,安装了两个博客程序,一个是技术博客,一个是杂谈博客,也就是说,博客app是可以多个实例运行的。这种情况下,就要区分控制器是跑在那个app下,所以需要加上这个批注。而对于单实例的app,比如这个DownloadApp,因为不需要区分判断当前所属哪个app,所以实际上可以忽略掉这个批注,但能加上尽量加上——加上没有坏处,不加往往容易出错。


另外,一定要注意命名空间,这个app的namespace统一都是 wojilu.Web.Controller 加上 app的名称。你不可以随便修改这个namespace,除非你在 mvc.config 这个配置文件中注册了你自己的 rootNamespace:


三、使用缓存数据库

这个下载app,用到的对象,除了“下载项”,还有“软件分类”、“运行平台”、“语言种类”、“授权模式”等。除了“下载项”会随着数据添加,一直膨胀下去,其他几个模型的数据量都是非常固定,并且很少的。比如语言种类也就“简体”、“英语”、“繁体”等几种。

如果你看过 《wojilu中的文本缓存数据库》这篇文章,你一定想到,这些数据没有必要存储在sqlserver或access等数据库中,而是应该直接缓存在内存中,随用随取,而且可以持久化。所以,我们让这几种数据量很固定的模型,继承自 CacheObject,而不是ObjectBase: