问题标签 [onion-architecture]
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.
.net - 洋葱架构的 Windows 服务
我见过的所有洋葱架构示例都在 ASP.NET MVC 应用程序的上下文中。他们倾向于通过将 IoC 设置放在基础结构 DLL 中并使用一些魔法(HttpModule 或 WebActivator)使 IIS 在正确的时间执行该设置代码来避免 UI 和服务实现(基础结构)之间的直接引用。
就我而言,我正在开发一个 Windows (TopShelf) 服务,并且正在努力解决如何使服务控制项目与基础设施项目完全分离。没有像在 IIS Web 应用程序中那样挂钩的执行管道。
我能想到的最好的方法是让服务项目扫描 IoC 注册表/模块类的 DLL,但这似乎仍然不那么干净。
有任何想法吗?
domain-driven-design - 这个 LocalizationService 类应该在具有洋葱架构的 DDD 中
我正在尝试使用 Onion Architecture 学习 DDD,但遇到了一个问题
我的应用程序应该支持标签、枚举、验证消息和某些实体中的某些数据(例如 Item.ItemName)
的本地化因此,很明显本地化过程与域和 ui
这个本地化服务也应该支持缓存
现在我很困惑我应该把这个类放在哪里
asp.net-mvc - 在我的域模型中有数据库上下文是否可以
我正在使用 ASP.NET MVC 开发一个基于 Web 的应用程序。我正在尝试拥有丰富的域模型而不是瘦/贫血模型。
我已经按照 Onion 架构对我的解决方案进行了建模。不同的项目如下:
- {}.Domain.Core - 包含域对象和接口,例如在基础设施层实现的 IDbContext
- {}.Database - 是数据库项目
- {].Infrastructure - 包含日志记录、数据访问等的实现。
- {}.Web - 视图和控制器
**** 数据访问是使用 dapper 完成的,IDbContext 是围绕 2 个简单命令、查询接口的包装器。我已将每个查询隔离为单独的类。
为了便于讨论,我只取了应用程序的一小部分。
我有一个版本化的文档库,其中包含文档以及标签、权限等其他元数据
我的文档对象的简化模型如下所示
我希望在域对象中定义操作,因为每个操作都涉及业务逻辑。让我把“删除”作为一个操作。需要执行的操作
- 验证用户是否有删除权限
- 检查是否没有会受到此删除影响的关联
- 检查是否没有正在进行的工作流
- 在事务中从数据库中删除实际项目
如上例所示,我需要数据库上下文来完成此操作。我目前考虑的方式是建模是否让域对象具有 IDbContext,它可以执行公开的查询。
在我的控制器类中,我调用域对象并执行操作。
我不确定在域对象中传递 IDbContext 是否可以?如果不是,有什么更好的建模方法?
我不相信有一个单独的服务层,因为 1) 在大多数情况下,控制器充当服务层的第一层 2) 服务层只是将相同的方法从域复制到另一个类
让我知道如何改进这个设计。
.net - 将 ASP.NET 身份与核心域模型解耦 - 洋葱架构
我正在使用这个示例项目(https://github.com/imranbaloch/ASPNETIdentityWithOnion)作为我的应用程序架构,在这个示例中,核心完全从包括身份框架在内的基础设施中分离出来。
在这个示例中,作者使用了适配器模式来解耦核心身份类(IdentityUser、IdentityRole ...),并在核心层中提供类似的类。
现在这个示例项目中的问题是域模型(产品、图像)没有与模仿身份的虚拟类(AppUser、ApplicationRole、AppliationUserRoles...)链接。
然后我修改了代码以添加对 AppUser 的引用
如果我将“AppUser”导航属性放在“Image”类中,则创建的数据库将有四个新表,而不是身份框架的默认五个表。
我需要将这些表合并到默认表中。如何 ?
编辑:
这是驻留在数据层中的身份模型(我无法从核心中引用)。
这也是我在 OnModelCreating 方法中的模型构建器:
asp.net-mvc - 在洋葱架构中使用角色授权
大家好
我有一个使用 ASP.NET Identity 2.0 的项目。在这个项目中,我遵循洋葱架构。这些层是:
1.UI:没有引用 Owin 或 ASP.Net Identity
2.AuthenticationService:包含asp.net身份usermanager的包装器。这个包装器实现了一个位于Bal层的接口。这个层还包含我的自定义UserStore。
3.Dal:DbContext 就在这里。
4.Bal:包含 Domaine 实体和接口。不引用 Owin 或 ASP.NET 标识或其他任何内容。
5.DependencyResolver:Owin Startup 在这里加上一些 Ninject 模块和 NinjectWebCommon。所以我正在使用 Ninject。
直到现在一切都很好。用户很高兴创建帐户,并且他们可以随时登录/注销/管理。现在面临的问题是授权(Role="rolename")。它只是不起作用。
这两个作品
这是一个没有。
在我的数据库中,我有属于角色管理员的用户。我不确定为什么这不起作用。mybe 因为我将所有身份验证内容移到另一层,所以 IPrincipal.IsInRole(string role) 无法弄清楚如何再检查一下。
正在创建自定义 Authorize 属性或创建一些扩展。但我决定先征求你的意见。
感谢您的时间
architecture - 外部设备逻辑在域驱动设计中属于哪里?
我正在尝试从更多领域驱动的角度开发一个新项目,虽然我主要了解这些原则,但仍有一些事情暗示了我。
我的领域需要与外部设备交互,因此我需要为设备发现、模型创建和一定程度的通信定义接口。
像上面这样的东西是否属于核心域,或者从域驱动的角度来看,这样的东西(它有助于我的域但不是我的域本身)完全位于域之外并使用域中定义的行为来完成工作?
为了添加更多信息,我目前的架构建模如下:
c# - 重构为领域驱动设计
我有一个场景正在尝试重构为 DDD。我有一个 Batch,它是 BatchEntries 的聚合和列表。创建 Batch 并添加 BatchEntries 后,将向该批次中的个人发送一条 SMS,并且该批次的状态从运行变为已发布。
关于如何使设计更好的任何想法?该域有两个聚合 Batch 和 BatchEntry,其中 Batch 是聚合根。
代码看起来像这样
域和域服务通过应用程序服务公开。应用服务中的代码如下:
问题:
- BatchStatus 即 Running、Posted 应该分配在哪里?
- MarkBatchAsPosted 方法是否应该定义为批处理实体中的方法?
- 对于领域驱动设计,如何最好地重新设计?
c# - 具有 I18N 数据库驱动的国际化的洋葱架构
我在任何地方都找不到答案,所以我想我会发布一个关于它的问题。
我已经按照本教程ASP.NET MVC 5 Internationalization · How to Store Strings in a Database or Xml
现在这很好,我可以让它工作。
现在的问题是,如何正确地将其合并到Onion Architecture中。
本教程有一个Resource
项目。这仍然有效还是可以抽象出来?
只是没有一个很好的教程来介绍如何将国际化整合到 Onion 架构中。
到目前为止,我所拥有的是:
- 包含 {Name, Culture, Type, Value} 的数据库表(资源)
- 实体称为
Resource
- 名为“IResourceRepository”的接口(GetResources()、GetResource(Culture,Name))
- 我有一个服务接口和一个服务,它也具有与存储库相同的方法来获取资源。
这是我第一次设置一个全新的 Web 应用程序,并且最近才了解 Onion 架构。任何帮助将不胜感激。
更新
这是我的部分尝试。
纠正我如果我错了请。
- 应用程序域实体
- Resource.cs(名称、文化、类型、值)
- App.Domain.Interfaces
- IResourceRepository.cs (GetResources(), GetResource(Culture, Name))
- App.Infrastructure.Data
- ResourceRepository.cs (GetResources(), GetResource(Culture, Name))
- 应用程序服务接口
- IResourceService.cs (object GetResource(Culture, Name))
- 应用程序.Web.UI.服务
- BaseResourceService.cs(实现 IResourceService.cs)
- ResourceService.cs(扩展 BaseResourceService.cs)
这就是我到目前为止的方式。所以Resource
包含了针对不同文化的一大堆资源。
很确定'n做错了什么。
asp.net-mvc - Onion 架构访问目录和应用程序数据库
我有点卡在洋葱架构上。
假设我正在开发一个应用程序,用户可以在其中注册帐户、登录并维护他们的帐户(例如更改电话号码)。
然而,当他们登录时,他们可以做其他应用程序的事情(例如创建产品、添加博客条目、发送带有照片的消息等......)
我正在努力定义业务逻辑,这就是原因。
所有应用程序服务都保存到Postgresql
数据库中。
所有用户管理功能和登录到他们的帐户都由LDAP 389 Directory Server
. 我将使用该Novell.Directory.Ldap
软件包,因为它将在单声道上运行并且尚不支持System.DirectoryServices.Protocols
应用程序数据库和目录服务器都有唯一的表。
我是否将应用程序数据库实体和 LDAP 目录服务模型都放在 App.Domain.Entities 中?
从技术上讲,我有 2 种不同类型的数据库和不同类型的模型。
不完全确定如何处理这个问题。
我的解决方案结构:
- 领域
- 应用程序域实体
- App.Domain.Interfaces
- 基础设施
- App.Infrastructure.Data (FluentNHibernate)
- App.Infrastructure.DependecyResulution (SimpleInjector)
- App.Infrastructure.Interfaces
- App.Infrastructure.Logging (NLog)
- App.Infrastructure.LDAP (Novel.Directory.Ldap)
- 服务
- 应用程序服务接口
- 网络
- App.Web.UI(ASP.NET MVC 4 剃刀)
我很确定我做错了。有人可以用某种伪示例指出我正确的方向吗?例如模型去哪里等。
先感谢您
domain-driven-design - 日志记录应该在 DDD 的洋葱架构中进行
我正在使用洋葱架构和域驱动设计开发控制台应用程序。我有两个域,我需要在其中实现日志记录,我很困惑我可以在哪里放置日志记录组件。我可以把它放在两个域的各自基础设施中吗?或者在可以在两个域中引用的共享内核中?如果我需要将它放在共享内核中,我应该遵循什么结构?我的意思是像核心,基础设施。