asp.net-mvc – ASP.NET MVC3 – 3层设计 – 事务控制和业务层设计问题
|
我正在设计一个ASP.NET MVC3应用程序,我希望在3层架构中明确区分关注点.我使用Fluent NHibernate作为ORM,Repository模式与NHibernate映射的实体一起使用.我想添加一个具有Unit Of Work模式的适当业务层,保留MVC部分仅用于表示(通过使用通过业务层映射到nHibernate实体的ViewModels). This article很好地描述了组合的3层和MVC架构. 根据这篇MVC + unit of work + repository文章,我没有看到业务层的明显区别.工作单元类为每个存储库类型提供强类型的getter,它看起来适合业务层.但是,它暴露了一个Save方法,我认为它会转换为使用nHibernate的BeginTransaction和CommitTransaction方法.这引出了一些问题: 1)将事务控制暴露给MVC是一个好主意吗?交易控制应该在哪个阶段发生?在我看来,MVC不应该对交易负责,但如何避免这种情况? 2)是否应该有一些自动处理交易的方法? This ActionFilter implementation是半自动的,但事务控制显然在MVC部分,而不是业务层. 3)UnitOfWork类与业务层类相同吗? 我感谢任何想法或例子.谢谢. 解决方法首先,我想澄清一下关于业务层的一些误解,因为你想使用Repository模式,你的设置是 Domain Driven Design的候选者,那么业务层实际上是[域模型( Entities and Value Objects,你设计你的实体和对象中面向对象方式的业务逻辑,以及应用层来协调域层的事务和操作以及命令,因此建议的体系结构将是这样的:>演示文稿(MVC)[OrderView,OrderPresentationModel,OrderController] >使用UnitOfWork(Transactions)和存储库来执行域逻辑 >域名 >实体和价值对象[订单,客户,LineItem,地址] > Infrastructure.DataAccess(使用ORM或数据访问技术) >存储库[OrderRepository,CustomerRepository] > Infrastructure.Common >记录 示例场景: [演示] OrderController: _orderService.CreateOrder(OrderDTO); [应用] OrderService: _unitOfWork.BeginTransaction();
var customer = _customerRepository.GetById(orderDTO.CustomerId);
var order = new Order() { Customer=customer,Price=orderDTO.Price,... }
_orderRepository.Add(order);
_unitOfWork.Commit();
关于你的问题: 1)将事务控制暴露给MVC是一个好主意吗?交易控制应该在哪个阶段发生?在我看来,但如何避免这种情况? 不,我宁愿在应用层中将其分开,以使设计灵活,以支持不同的演示. 2)是否应该有一些自动处理交易的方法?此ActionFilter实现是半自动的,但事务控制显然位于MVC部分,而不是业务层. 在应用程序层中使用事务. 3)UnitOfWork类与业务层类相同吗? 不,这只是将任务分组到事务中的一种方法.业务逻辑实际上封装在实体中,如果逻辑与一个实体无关,则应在域服务[TransferService.Transfer(account1,account2,amount)]中实现,用于协调,访问存储库和应用程序的事务层是地方. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 我可以从动作过滤器返回动作结果吗?
- asp.net-mvc – 使用jQuery ajax / load提交数组参数
- asp.net-mvc-4 – 如何实现自定义SiteMapNodeProvider
- ASP.NET中的超链接控件和链接控件有什么区别?
- ASP.net MVC验证突出显示和不正确的字段Jquery上的图标
- 在asp.net core 1.0中如何获取当前url
- ASP.NET MVC中的runat =“server”标签的状态是什么?
- asp.net web大文件上传带进度条实例代码
- ASP.Net:动态添加到占位符的用户控件无法检索值
- asp.net-mvc-4 – MVC 4如果经过身份验证,则从登录页面重定
- asp.net-mvc – 将会话永久保持为stackoverflow
- ASP.net应用程序崩溃 – 无法加载文件或程序集“
- asp.net – 实体框架:如何解决“FOREIGN KEY约束
- asp.net-mvc – 使用源代码的Real World ASP.NET
- asp.net – 如何在SqlDataSource中为存储过程指定
- asp.net-mvc – 输出在剃刀通过变量?
- ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单
- asp.net-mvc-3 – MVC3非顺序索引和DefaultModel
- asp.net-core-mvc – ASP.NET Core MVC控制器在单
- Asp.net mvc – 获取上传文件的完整文件名
