问题标签 [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.
c# - 使用洋葱架构使用多个 API 和 WebServices
我目前正在使用洋葱架构设置 Visual Studio 解决方案。我对如何构建解决方案有很好的理解,但我遇到了一些麻烦。我的解决方案是使用多个 API。这些 API 使用 WCF、Soap Web 服务和 RESTSharp 用于 REST 服务。我不确定如何构建它。
最大的困惑在于 REST 服务,因为它不仅使用 RESTSharp,还使用一些用于序列化的 POCO 类。我也有:
我的第一个想法是创建 Infrastructure.RestSharp,我将在其中实现所有返回 ApiResult 的接口,但问题是我将这些 POCO 类和 ApiResult 放在哪里?由于接口正在使用它们,它们将不得不进入核心的某个地方,但是哪里是放置它们的好地方呢?
WCF 和肥皂服务呢?我会创建一个 Infrastructure.WebServices 吗?
mongodb - MongoDB:使用洋葱架构,我的域/核心层是否需要引用 MongoDB dll?
MongoDB 有自己的 ObjectId 类型,它用作默认主键。我正在尝试设置一个使用 Onion Architecture 设计的应用程序,并将 MongoDB 作为基础设施层中的持久性引擎。如果我的 POCO 类是在我的域层中定义的,但使用 MongoDB 的 ObjectID 类型作为主键,这会迫使我将 MongoDB 添加为对我的域层的依赖吗?
asp.net-mvc - 中间层/后端服务的洋葱架构
我目前正在研究J.Palermo 的Onion Architecture。在我的情况下,我在实施它时遇到了一些麻烦。这种架构是否适合“业务较少”的网站,也就是服务的混搭?
这是我的情况:
我们有许多后端服务(在 WCF 中),每一个都暴露独立的业务数据(营销、帐户、报价、CMS ......)。我们的许多 MVC 网站“只是”使用这些服务来呈现页面。所有业务逻辑都在服务中,网站仅限于呈现逻辑。网站中没有数据库访问权限。然而,一些业务数据可以合并到一个复合实体中进行展示(例如将内容页面链接到报价)。我想把这个逻辑放在服务层下。
编辑: 我应该为映射后端/中间层服务结果/操作创建域模型吗?也许这里的业务逻辑只是合并来自不同来源的数据?
谢谢,
c# - 如何在 n 层架构中解决此 NHibernate 查询?
我试图将 NHibernate 与我的服务层分离时碰壁了。我的架构如下所示:
网络 -> 服务 -> 存储库 -> nhibernate -> 数据库
我希望能够从我的服务层和可能的 web 层产生休眠查询,而这些层不知道它们正在处理什么 orm。目前,我的所有存储库都有一个 find 方法,该方法包含IList<object[]> criteria
. new object() {"Username", usernameVariable};
这允许我从我的架构中的任何地方传递一个标准列表。NHibernate 接受它并创建一个新的 Criteria 对象并添加传入的标准。这适用于我的服务层的基本搜索,但我希望能够传入我的存储库转换为 NHibernate 标准的查询对象。
真的,我很想实现类似这个问题中描述的东西:抽象休眠标准是否有价值。我只是没有找到任何关于如何实现这样的东西的好资源。该问题中描述的方法是一个好方法吗?如果是这样,任何人都可以提供一些关于如何实施这种解决方案的指示吗?
c# - 洋葱架构外部服务
我目前正在从事一个基于 Onion Architecture 的项目。上图显示了解决方案。
在基础设施中,我们有 External Service 。但是 WebAPI 只能访问 Core 。
但是在 Web API 项目中,我想访问外部服务公开的一些模型?我们如何在不添加对 Web API 中的 Infrastructure 的引用的情况下实现这一点。
还是我们错误地实现了洋葱架构?
asp.net-mvc - 如何在不引入依赖关系的情况下使用 Onion Architecture 实现 UnitOfWork?
我正在设置一个 asp.Net Mvc 4 应用程序并希望使用洋葱架构模式对其进行配置。过去我使用过这样的工作单元模式
然后,我会将 UnitOfWork 类的实例传递给 Controller 以执行类似这样的简单 CRUD 操作。
我已将应用程序分成三个项目。
- 核
- 基础设施
- 网络
我在 Core 项目中有我的所有接口,在 Infrastructure 项目中有 IRepository 接口的实现。如果我将 UnitOfWork 类放在核心项目中,那么因为它在基础设施项目中需要一个新的存储库,所以我正在创建从核心到基础设施的依赖关系。如果我将它包含在基础架构中,那么 Web 项目(具有控制器)将依赖于基础架构,整个解决方案最终看起来不像洋葱,而更像意大利面条。
.net - 洋葱架构中的依赖解析
Onion 架构是一种构建应用程序以保持关注点分离和松散耦合的方式(示例项目位于:http : //onionarch.codeplex.com/)。依赖注入/解决是该架构的一个关键方面,因为它用于将所有层联系在一起。
上面的链接包含一个关于如何使用 Onion 分层构造 ASP.NET MVC 的示例应用程序。我真的很喜欢它,但是这些示例中的大多数都使用 Ninject(我们都知道它很慢)。我想知道是否有人可以详细说明如何将不同的 DI 工具(如 SimpleInjector、Unity 或 Autofac)集成到 Onion 项目中。
关键是所有层都只有1个依赖(包括MVC项目),即Core层。除了 Dependency Resolution 层,该层可以引用所有层。
我很难将 MVC 项目设置为启动项目,使用 DI,并且不包括在 MVC 层中对 DI 工具的引用。
inversion-of-control - 洋葱架构与 IoC 矛盾吗
Jeffrey Palermo 开创了洋葱架构,我找到了一个很好的方法。
http://www.headspring.com/jeffrey/onion-architecture-part-4-after-four-years/
然而,如果我的理解是正确的,他的声明“内层定义接口。外层实现接口”似乎与 IoC 相矛盾,它指出消费者定义接口和提供者实现它,即控制权在于消费者而不是提供者。
这个原则对我来说很有意义,因为,假设你正在编写一个 UI,这个原则意味着你可以继续创建你的 UI,而不需要对你将要调用的服务一无所知,因为你负责定义暴露所有服务的接口您需要的功能。
因此,为此,Jeffreys 的声明似乎自相矛盾,让我对将合同(接口定义)放在哪里感到困惑,因为它似乎暗示: Domain Layer MyEntity IMyService Service MyEntityService : IMyService
由于域下面没有层,我将 IMyEntity 放在哪里。这也意味着在域存在并定义 IMyService 之前,我无法创建演示项目。
正如我的旁注,我在哪里放置 IMyEntityRepository 和 MyEntityRepository ?由于服务依赖于 IMyEntityRepository 而 MyEntityRepository 依赖于 IMyEntity
asp.net-mvc-4 - 如何在使用 MVC4 作为前端的洋葱架构中使用动态模块加载
我正试图围绕Onion Architecture中的依赖注入,我发现这个解决方案在洋葱周围使用依赖解析层。但是发生的事情太多了,我完全迷失了。
所以我设置了一个项目来尝试一下。我喜欢从简单开始,因此(MVC)控制器方法上的简单日志条目将是一个好的开始。我想使用动态模块加载( kernel.Load("*.dll");
),因为它是 Ninject wiki 推荐的。
我的解决方案如下所示:(目前)
我想遵循此处概述的依赖关系解决指南。
记录器
日志实现
依赖解析
我想要完成的
用户界面
我需要以kernel.Load("*.dll");
某种方式运行,我需要设置我的 MVC 以使用 DI。我现在才确定如何,因为 UI 无法知道 Dependency Resolution 层。
dependency-injection - 配置非特定于框架的映射行为
我正在尝试配置我的对象映射器,但不知道我正在使用哪个映射器。:/
这听起来可能有点奇怪。这样做的原因是我正在尝试洋葱架构,因此我的 UI 无法了解位于我的基础架构中的对象映射器。有关示例,请参见此解决方案。
我在弄清楚我应该如何“委托”非默认映射行为时遇到了一些麻烦。像这样的东西:
我在我的 MVC 项目中设置了一个从 Global.asax 调用的类,这是我要配置我的映射的地方。
我在想我可以做如下的事情。(IMapper是一个位于Domain中的自定义接口)
现在......我将如何设置像.ForMember这样的特殊行为?请记住,它不能特定于 AutoMapper。
我在想一些事情,在这些方面mapper.CreateMap<MyModel, MyViewModel>(Expression<Func<T>>)
,Func 会做一些我现在无法弄清楚的黑魔法:( - 我是在正确的道路上还是我错过了一些重要的事情?