- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在设计一个 ASP.NET MVC3 应用程序,我希望在 3 层架构中实现清晰的关注点分离。我使用 Fluent NHibernate 作为 ORM,即使用 NHibernate 映射的实体的存储库模式。我想添加一个具有工作单元模式的适当业务层,保留 MVC 部分仅用于表示(通过使用通过业务层映射到 nHibernate 实体的 ViewModel)。 This article很好地描述了组合的 3 层和 MVC 架构。
根据这个MVC + unit of work + repository文章我没有看到业务层的明显区别。工作单元类为每个存储库类型提供强类型的 getter,这看起来适合业务层。然而,它公开了一个 Save 方法,我认为该方法将转换为 nHibernate 的 BeginTransaction 和 CommitTransaction 方法。这引出了一些问题:
1) 将事务控制暴露给 MVC 是一个好主意吗?事务控制应该在哪个阶段发生?在我看来,MVC 不应该负责事务,但如何避免呢?
2)是否应该有某种自动方式来处理事务? This ActionFilter implementation是半自动的但是事务控制显然是在MVC部分,不是业务层。
3) UnitOfWork 类与业务层类相同吗?
- 如果是这样,是否意味着我们可以向其中添加自定义业务逻辑方法?
- 如果没有,我们是否用包含业务逻辑方法的其他一些类来包装工作单元?
我很欣赏任何想法或例子。谢谢。
最佳答案
首先,我想澄清关于业务层的一点误解,因为您想使用存储库模式,并且您的设置是 Domain Driven Design 的候选者。 ,那么业务层实际上是[域模型(Entities and Value Objects,您在实体和对象中以面向对象的方式设计业务逻辑),应用程序层协调事务、操作和命令到域层],所以建议的架构将是这样的:
示例场景:
[演示]订单 Controller :
_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 是一个好主意吗?事务控制应该在哪个阶段发生?在我看来,MVC 不应该负责事务,但如何避免这种情况?
不,我更愿意将其分离在应用程序层,以便使设计灵活以支持不同的演示。
2)是否应该有某种自动方式来处理事务?这个ActionFilter的实现是半自动的,但是事务控制显然是在MVC部分,而不是业务层。
在应用层使用事务。
3) UnitOfWork 类与业务层类相同吗?- 如果是这样,这是否意味着我们可以向其中添加自定义业务逻辑方法?- 如果没有,我们是否用包含业务逻辑方法的其他一些类来包装工作单元?
不,这只是将任务分组为事务的一种方法。业务逻辑实际上封装在实体中,如果逻辑与一个实体无关,则应在域服务 [TransferService.Transfer(account1, account2, amount)] 中实现,用于协调、访问存储库和应用程序事务层就是这个地方。
关于asp.net-mvc - ASP.NET MVC3 - 3 Tier design - 事务控制和业务层设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7772704/
Java EE 中的这些是什么.表示层.业务层.集成层 我想通过示例了解这些模式是什么 最佳答案 表示层:用户看到的内容,通常是网络应用程序。 业务层:执行应用程序的所有逻辑的地方。 集成层:将系统连
通过转到工具->选项并设置哪些程序集将成为分析的一部分(并忽略其余程序集),我能够在早期版本的 nDepend 中执行此操作。 nDepend 试用版的最新版本让我可以设置它,但它似乎忽略了设置并始终
上周我和我的前辈讨论了 3 层架构。我是说它有一个 UI 层、业务逻辑层和数据访问层。我讲完之后他就跟我说,我说的是三层架构,不是三层架构。然后我问他有什么区别,他分配给我的任务是制作有关差异的文档。
我使用分级价格,并对 1 到 4 之间的数量设定了固定价格,对超过 4 的数量设定了每件商品的价格。 我想修改我的购物车,为数量 >= 1 && 数量 <=4 的商品设置固定价格 我该怎么做? 这是我
十多年来,我们一直在构建三层架构。划分表示层、逻辑层和数据层应该允许我们在需要时单独交换每一层,无论是通过更改的需求还是新技术。 我从未见过它在实践中起作用...... 主要是因为(至少)以下原因之一
我意识到已经有很多关于 n 层设计的帖子,这可能是我在思考问题和兜圈子,但我现在自己都很困惑,希望从社区中得到一些澄清请。 我正在尝试将我创建的一个项目(一开始在架构上设计得不是很好)分成不同的层(每
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 3年前关闭。
我一直在尝试镜像一些功能在另一个网站上看到的 Magento (v1.6) 中。在示例中,店主已设置将销售价格应用于层级的能力。(很可能是 tierprices.phtml 作为包装)通过应用销售价格
“层”和“层”有什么区别? 最佳答案 Logical layers are merely a way oforganizing your code. Typical layersinclude Pre
我想听听你的一些想法 资源名称/分类 资源地点 让我告诉你应用范围: 3 种或更多支持的语言 3个MVC网站[有很多共享资源,也有一些独特的资源] 1 个共享 MVC 扩展库 1 个核心业务库,具有共
最近,我一直在讨论在 n 层架构中处理链上通信的最佳方式。 目前我正在做的方法是在层之间抛出和处理异常以查找错误,并使用事件/委托(delegate)进行其他通信(更新进度条等)。这些是最好的方法,还
我有一个在纸面上很简单的问题,但我很难用代码解决。在我继续之前,这不是字符串拆分问题。 我有一个本质上是带状时间表应用程序。比例因客户而异,但一个例子是一个月的前三个小时为 80,接下来的三个小时为
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
工具:Mvc4、Sql server、Nhibernate 我正在学习 Ntier 架构,并计划通过一个小示例来学习它。这将是一个学生注册申请,其中包含一个表格一种。名b.姓C。地址d.学生卡该应用程
我正在开发一个将使用 LINQ to SQL 的个人项目 (C#/ASP.NET)。解决方案将有(到目前为止)一个 Webform 项目、一个命名空间项目(业务逻辑)和一个测试项目。到目前为止,我处于
根据pricing page ,将于 2016 年 1 月 1 日为 BigQuery 引入新的分层定价模型。 我们希望能够预测这可能对我们的应用程序产生的任何成本影响。因此,我们查看了一些更复杂查询
如何解决:使用 MongoDB Atlas 时出现“MongoError: $where is not allowed in this atlas tier”的问题? 这是我的代码: async fu
Out 团队正在构建一个 N-Tier 应用程序,它将处理大量的数据库和网络方法。 基本上我们设计了以下层(从下到上): 数据层:可以是 Oracle 或 SQL(基本上是使用 Database Fi
Get-azdisk -disk diskname -resourcegroup RG 提供高级硬盘层,但不显示标准 HDD 驱动器层,知道为什么吗? 谢谢 最佳答案 是的,你是对的@ArunCO。我
我有一个 azure 函数,旨在自动与 API 管理进行交互。 因此,在 Http Trigger 上,它会创建一个 api 管理用户。 这是开发人员层,一切正常 - 我已经测试了它和一切。 自从从开
我是一名优秀的程序员,十分优秀!