我正在开发一个 MVC4/EF5 项目,我真的很想在我的应用程序设计上投入大量时间。
我为自己制定了一项政策/原则。我的控制器需要专用,这意味着它们只能与一个特定的 repo 交互。
例如(我只是在写一些伪代码)
对象:用户、博客、帖子、评论
UserController -> UserRepo -> 处理用户对象
BlogController -> BlogRepo -> 处理博客对象
ETC...
现在我正在研究以下困境。使用 EF5 向数据库创建/添加新对象的性能最高的是什么。
第一种方法:向用户添加功能以添加博客或添加帖子。
addBlog(Blog b){this.Blog.addBlog(b);}
addPost(int blogid, Post p){this.Blog(b).addPost(p);}
对我来说,这意味着每篇文章都会启动一个用户控制器,注入一个用户存储库,并将在用户表中进行读取操作以获取对象。然后它将执行 addPost 函数并保存更改。
第二种方法:给 Blog 和 Post 对象一些外键 id
Blog property: UserId
Post property: UserId, BlogId
这意味着无论何时创建博客,都会启动博客控制器,注入 blogrepo 并且不需要“查找”。控制器只会将新的 Blog 对象添加到上下文中。(UserId 属性是从 websecurity 上下文中设置的)
这也意味着无论何时创建一个帖子,都会启动一个 postcontroller,一个 postrepo 将被注入,并且不需要“LOOKUP”。控制器只会添加带有注入的 UserId 和 BlogId 的新 Post 对象。(这是控制器动作的参数)
对我来说,第二种方法似乎将负载分配到不同的表而不是一个表上。但是这种方法的缺点是你不能真正进行模型测试。因为将没有函数 addBlog 到要测试的 User 对象。
我的问题有点清楚吗?我真的很想为我的应用程序构建性能最高的框架。另外,具有以下属性的用户对象的影响是什么。
虚拟 ICollection 虚拟 IColleciton
它们都可以通过获取 User 对象来检索。(然后对虚拟对象进行延迟加载)
还是让专用的 BlogController 索引属于某个用户 id 的博客更好。
非常感谢所有的建议和评论!
氪