asp.net-mvc – 如何建立一个ASP.NET MVC应用程序与EF?
我将构建一个具有实体框架的MVC应用程序构建到一个n层应用程序中,我有点麻烦.
正常的教科书3层应用应该看起来像 数据访问 – >业务逻辑 – >演示 演示文稿不应该知道有关数据访问的任何内容.使用EF,所有层都需要了解模型.所以我的架构现在看起来更像 Data Access->Business Logic | | --------------- | MVC 我在这里缺少某些东西,还是以错误的方式思考? 我应该把EF本身作为数据访问层,把实体放在业务逻辑中吗? 解决方法
那么,我想你的问题是,如何在MVC应用程序中构建“层”.
看看这个简单的架构,我用它为我的MVC应用程序,它似乎是干净,高效的. >解决方案中的项目 – 业务模型 – 简单的类库,包含代表业务领域的POCO类.您可以在这里使用数据注释,元数据类用于验证逻辑等. 看起来像这样: 瘦控制器: public class SomethingController : BaseController { public ActionResult DoSomething(SomeBusinessThing input) { if (ModelState.IsValid) { var result = CustomerRepository.DoSomeBusinessLogicAndPersistenceAndStuff(input); return View(result); // you can use AutoMapper here,if you dont want to use business object as viewmodels } } } 我的存储库“属性”继承自我的BaseController: public class BaseController : Controller { // ... other stuff used by all (or multiple) controllers private ICustomerRepository _customerRepository; protected ICustomerRepository CustomerRepository { get { if (_customerRepository== null) _customerRepository= DependencyResolver.Current.GetService(); return _customerRepository; } } } 你可以使用这个“懒惰”DI,如果您的控制器使用许多服务,但每个动作只有1-2个,所以使用构造函数注入它们将是一种效率低下.有人可以告诉你这是“隐藏”的依赖,但如果你把所有这些东西放在一个地方 – BaseController,它没有什么大不了的. 那么,仓库的实现真的是你的事情. MVC应用程序甚至不知道您正在使用EF,它只知道服务接口,并不关心底层实现(如果需要,您可以随时切换)! 联盟: >控制器是瘦的 – 没有业务逻辑>模型是FAT – 在这种情况下,存储库封装了所有的业务逻辑(您也可以确定使用其他类型的服务,例如一些计算器用于处理等等,请记住,MVC不关心,只知道接口)> ViewModels是为视图输入的(ViewModel可以直接作为您的业务模型,也可以使用AutoMapper创建“纯”ViewModels) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 关于Ajax调用Register动作方法的书呆子晚餐
- asp.net – 我可以获得有关JavaScript代理的一些建议吗?
- asp.net – 当我按浏览器BACK按钮会发生什么?
- asp.net-mvc – Razor MVC模型正在丢失保存操作的数据
- asp.net – 在RedirectToAction调用中传播QueryString参数
- asp.net-mvc-3 – MVC2到MVC3 IOC问题
- asp.net-mvc – MVC ELMAH和SQL Azure
- asp.net-mvc – 在ASP.NET身份中角色与声明的最佳实践
- asp.net-mvc-3 – 如何在View中使用ViewBag
- eShopOnWeb 知多少
- entity-framework – 将DbContext注入Repository
- asp.net – MVC 4可以在.net 3.5上运行吗?
- ASP.NET Core Mvc中空返回值的处理方式
- asp.net-mvc-3 – StringLength属性行为
- asp.net – MVC会话到期 – 继续左边
- ASP.NET数据从代码隐藏双向双向绑定
- ASP.NET性能优化之让浏览器缓存动态网页的方法
- asp.net-mvc – 在WebApi的ActionFilterAttribut
- asp.net-mvc – 从ASP .NET MVC 3 _Layout View访
- net core 项目提示未能加载导入的项目文件