问题标签 [n-layer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wcf - N层架构
我处于必须从头开始设计和实施系统的情况。我有一些关于架构的问题,希望得到您的评论和想法。
关于项目的快速信息:它是一个以数据为中心的 Web 应用程序。
该应用程序将构建在带有 MS SQL SERVER 2008 数据库的 Microsoft .NET Framework 4.0 之上。
要求:
- 丰富的用户界面和强大的
- 多设备支持(每个浏览器和每个设备上)
- 松耦合
下面是我构建的架构图:
架构简介
- 表示层:HTML5/ASP.NET MVC + JQuery(第一版支持多设备的Web应用程序)
- 分布式服务:WCF (XML/JSON/JSONP)
- 领域层(业务层):所有业务逻辑
- 数据持久性(DAL 层):Entity Framework 4.0 与数据库优先方法。POCO 实体是使用 T4 模板生成和分离出来的
- 基础设施层:包含常见的库,如 POCO 实体、异常处理、日志记录等
我的担忧:
- 由于应用程序将被构建为松散耦合,因此如果未来业务需求增长,新模块可以轻松插入而不会影响架构。所以我想到了将存储库模式与 IoC 和 DI 一起使用(可以是 Unity/Ninject/Sprint.NET 或任何其他)
- 支持 XML 和 JSON 的 WCF
- 用于放置 IoC 和 DI 的分布式服务层
- 使用 Enterprise Library 5.0 进行异常处理和记录
寻找有价值的意见和建议。如果我做错了什么,请让我朝着正确的方向前进。
entity-framework-4.1 - 统一和生命周期管理配置 - 总是瞬态生命周期管理器
Unity 出现配置错误。我正在尝试实现http://unitymvc3.codeplex.com/,但我现在被困住了,因为:
在我的统一配置中,我有以下设置:
但是在创建统一的时候,(我的简单代码在这里:)
一切都配置得很好,除了注册“IManDbContext”有LifetimeManagerType = {Name = "TransientLifetimeManager" FullName = "Microsoft.Practices.Unity.TransientLifetimeManager"}
,但它应该是hierarchical lifetime manager
你知道如何告诉统一(在配置中,而不是在代码中)我想要分层生命周期管理器吗?感谢您的任何提示。
c# - .net 类库中的参考网站
我正在编写一个 n 层应用程序/站点,在我的 Common 类库中,我需要调用 NetSqlAzMan Web 引用,但它不能导入到类库中,只能导入到网站类型的项目中。解决它的一种方法是让我的公共层成为一个站点,但这似乎并不正确。如何正确实施?我正在使用 VS2010 Pro
entity-framework - 服务层、存储库层和实体框架
我正在使用实体框架(POCO 实体)设计分层架构(所有层都在同一台机器上),以便将相同的层与 ASP.Net MVC 应用程序、移动应用程序等一起使用;也为了保持可测试性......
我将拥有 UI 层 > 服务层 > 存储库层 > 实体框架 > 数据库,具有依赖注入、层抽象和关注点分离。
假设,我有两个方法(客户,订单是实体类)。我应该在哪一层放置这些方法?:
- 包含 LINQ 查询的公共 IList GetOrdersByCustomerId(int CustomerId)。
(存储层,还是服务层?) - public void RequestAnOrderAndStartTheShipmentProcess(Customer CustomerEntity, Order OrderEntity) 执行一些插入操作,如 orderRepository.Add(OrderEntity)、shipmentRepository.Add(ShipmentEntity) 等...
(单独的业务逻辑层或服务层?)
- 包含 LINQ 查询的公共 IList GetOrdersByCustomerId(int CustomerId)。
我将有 IOrderService 接口,以及用于依赖注入的“OrderService : IOrderService”类,接口和类将定位在同一个程序集中,还是应该定位在不同的程序集中?
谢谢
编辑
感谢您的回答。但是在这种情况下,想到了四个问题...
1.如果UI有引用DataAccess程序集,开发人员可以直接在UI代码中访问DataAccess类,难道不应该增加额外的代码审查工作吗? (例如,如果团队中有初级开发人员)?
2.我明白了,我应该在Repository层(做真正的查询)和Service层(在OrderRepository类中调用GetOrdersByCustomerId方法)都有GetOrdersByCustomerId方法,对吗?
3. 另外我应该对(几乎)所有表进行 CRUD 操作以维护它们,并考虑我当前项目中有 96 个表(不是太多但也不少),我应该有添加、更新、删除方法也在服务层?还是我应该在我的服务层考虑更多的“行为”?
4. 我很困惑,如果我的 OrderRepository 中有 GetOrdersByCustomerById、GetOrdersByStatus 等方法,那不就是一个 DAO 类吗?
c# - EF / Automapper 和 n 层架构
我的应用程序的架构结构如下:
用户界面(客户端)
用户界面 (XAML)
虚拟机(客户端)
所有视图模型的层。该层与来自服务层的 DTO 一起使用。
服务(服务器端)
客户端的通信接口。客户端使用此服务层的 DTO。该层执行从 DTO 到 EF-Entities(并返回)的转换。我使用自动映射器进行转换。
域(服务器端)
整个业务逻辑分为几个领域。该层与实体框架中的实体一起工作。
数据访问(服务器端):
数据访问层与 EF 一起工作。该层采用存储库/工作单元模式设计。
我的问题:创建新记录效果很好。但是如果我想更新记录,EF 不知道更新。它总是想创造一个新的记录。我认为,问题在于 EF 与整个变更跟踪机制的引用一起工作。自动映射器将始终创建新记录。它是否正确?
有没有其他选择?
提前致谢。
亲切的问候,亲
编辑:我的问题总结:
EF 在我的 n 层架构中不会更新,它总是想创建一条新记录。
我希望这会有所帮助。
asp.net - n 层架构:为多个服务使用 TransactionScope 或工作单元?
我目前正在研究具有以下几层的 n 层架构
- 查看(ASP.net Web 应用程序)
- 经理(编排服务)
- 服务(业务层使用工作单元)
- 存储库(数据访问)
目前,Manager 正在调用一项或多项服务来访问数据、保存数据或执行其他一些业务。服务正在使用已实现的工作单元和存储库,以便在事务中使用服务。
现在我们有一个需要调用不同服务的管理器,这些服务应该在一个事务中一起工作。
我的观点是,工作单元调用应该保留在服务中,因为服务正在使用存储库访问数据库。如果我们将 Unit of Work 调用移至 Manager,则会破坏设计。经理需要对存储库的引用。
任何建议如何设计访问?
谢谢!
c# - 需要.net n 层网站结构建议
我正在使用 Entity Framework 作为我的数据访问层创建我的第一个 .net/c# 网站。我已将我的项目分成多个层,以便拥有 DataAccess、BusinessLogic、一个单独的 BusinessObjects 层,并且网站本身就是 UI(Pages/UserControls/Appcode 文件夹)。还有一个额外的实用程序插件项目。
EF 模型已进入 DA,而实体创建已进入 BO。一切都感觉很好,但我遇到了 AppCode (UI) 中的逻辑类和 BusinessLogic 中的逻辑类的问题。
是否有任何指导方针可以帮助我确定事情的哪一边?
.net - 依赖注入是一个横切关注点吗?
我正在设计一个应用程序并且我使用的是 n 层架构,我有:
然后我试图将我的项目与特定的 DI 框架隔离开来,即创建我自己的 IContainer 接口并确保我的组件仅依赖于该接口。
然后我有2个问题。
1-这是最后一个好习惯吗?
2 - (更重要的是)依赖注入是一个横切关注点吗?那就是我可以将DI相关的组件放在横切层吗?如果答案不是哪里可以安装这些组件。
我问这个是因为当我深入研究关于横切关注点的架构设计指南时,他们通常会提到:
asp.net - 来自业务层的 ASP.NET 自定义异常处理
我是 OOP 的新手,所以我需要帮助来了解这是否是处理它的正确方法。我有一个 3 层 Web 项目(+ DTO),我试图了解这是从业务对象返回“错误”到表示层的最佳方式。特别是现在我正面临这个创建用户的问题。假设我想在网站注册时在数据库中创建用户,我需要告诉实际用户用户名或电子邮件是否已经被使用(这只是一个例子)。
例如,ASP.NET Membership.CreateUser() 方法通过引用传递一个 MembershipCreateStatus 对象,因此该方法用于返回一个 Enum(位于另一个命名空间中......)以传递尝试的状态,这可能是 DuplicateEmail,重复用户名,等等。
我根据异常实现了另一种方式,但我想听听你的意见。在创建用户的 BLL 管理器类中,我以这种方式创建了一个嵌套的 Excpetion 类和嵌套的 Enums 错误类型:
然后在 UI 层(后面的 aspx 代码)我调用管理器并检查异常,如下所示:
这是一个正确的方法吗,考虑到异常和枚举都非常特定于这个经理,所以如果我沿着这条路走,每个经理都会有嵌套的 ManagerException 和相关的枚举?
一如既往地提前感谢您的意见。
跟进 Brian 和 Cyborg 建议的“自定义代码”场景(我标记了他的答案只是因为它更完整,Brian 也许其他用户对 MS 建议感兴趣)你认为在管理器类中嵌套自定义返回对象和相关枚举会是个好主意吗?由于这些枚举将与这个管理器类严格相关(并且 BLL 中的每个 managar 类都有自己的)你认为我仍然可以将它们用作传递的状态码吗?
编辑:我以这种方式重构......你认为它可以吗?
在表示层:
entity-framework - 用于类生成的 EF5 数据库第一个模型模板 (tt)
我想让我从现有数据库中创建的所有实体都继承自同一个接口。
我想这可以通过模板来完成。而且我看过那个丑陋的.tt
文件,但没有帮助(或者我没有找到它)。
有模板的任何文档、示例……吗?
有任何常见范例的提示或预制模板,例如 N 层设计或领域驱动设计?