- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Yes, however, the definition of domain layer can include applicationservices which act as a facade over the domain. The applicationservice usually references a repository and other infrastructuralservices. It orchestrates domain objects and said services to implementuse cases.
... which act as a facade over the domain
The application service usually references a repository and otherinfrastructural services.
I usually merge application services, as described above, into thedomain layer.
I tend to adhere to the Hexagonal architecture style ...
Part of the benefit of declaring a repository interface in the domainlayer is that it specifies the data access requirements of the domain.
If what you call a "regular" application service interacts with thedomain, I think it is acceptable to make it part of the domain"layer". However, the domain should not directly depend on thesurrounding application service and so it is possible to split them upinto separate modules if desired.
Yes because it can be contrasted with a layered architecture. A strictlayered architecture does not gel with the idea of declaringrepository interfaces in domain layer and implementing ininfrastructure layer. This is because, on the one hand, you have adependency in one direction, but in terms of deployment the dependencyis in the other. Hexagonal addresses these concerns by placing thedomain at the center. Take a look at the onion architecture - it isessentially hexagonal but may be easier to grasp.
Each layer is coupled to the layers below it, and each layer is oftencoupled to various infrastructure concerns.
The first layer around the Domain Model is typically where we wouldfind interfaces that provide object saving and retrieving behavior,called repository interfaces.
The controller only depends on interfaces, which are defined in theapplication core. Remember that all dependencies are toward thecenter.
class Foo
{
...
public int DoSomething(IRepository repo)
{
...
var info = repo.Get...;
...
}
}
由于上述原因,我必须承认我没有看到使用 Onion 架构的好处,甚至没有看到它与 TLA 的区别(假设所有基础设施接口(interface)都在域层中定义)--> 换句话说,我们不能描述 TLA使用洋葱架构图?!
Yes. In TLA the domain layer would communicate directly withinfrastructure in terms of classes declared by infrastructure layernot the other way around.
The coupling goes both ways. The application core depends onimplementations in infrastructure and infrastructure depend oninterfaces declared in application core.
It appears the author is implying that since dependencies are only inwardsand since Infrastructure interfaces are defined around Domain Model,that code within Domain Model shouldn't reference these interfaces.
在我看来,您的代码示例适合编码。
所以我说洋葱架构不“允许”域模型引用基础设施接口(interface)是正确的,因为它们是在层 中定义的。英德 ( InDe 当然也驻留在应用程序核心中)围绕 DM 强文本并从 引用它们DM 意味着依赖关系从 向上DM 至 英德 ?
DDD is typically presented in a hexagonal/onion architectural stylewhich is why there may be some confusion. I think what you've probablybeen doing is already hexagonal which is why it seems like it is thesame thing.
是的,我也有这种印象。尽管我确实计划在读完 Evan 的书后更深入地研究 Hexagonal 架构(特别是因为新的 DDD 书将基于它的一些示例)。
第四次更新:
2)
d)
If infrastructure owned interface and implementation then the domainor application layer would be responsible for implementing persistencefor itself.
我假设应用程序或域层需要自己实现它,因为引用在基础设施层中定义的接口(interface)会洋葱的内层规则不依赖于外层(基础设施层是外层)?
4)
Domain model can reference infrastructure interfaces, such as arepository, because they are declared together. If application layeris split from the domain, as it is in the Onion diagram, then the domain layercan avoid referencing interfaces because they can be defined in theapplication layer.
但是根据那篇文章,基础设施接口(interface)是在围绕域层的层中声明的,这意味着它比域层更接近应用程序核心的外边缘——而且正如文章所指出的,内层不应该依赖于外层>!
谢谢你
最佳答案
1a) 是的,但是域层的定义可以包括充当 facade 的应用程序服务在域上。应用程序服务通常引用存储库和其他基础设施服务。它编排域对象和所述服务以实现用例。
2a,b)
如上所述,我通常将应用程序服务合并到域层中。我倾向于坚持Hexagonal architecture样式,也称为端口和适配器。域位于中心,由应用程序服务和所有外部连接(包括存储库、UI 和服务作为端口)封装。
2c) 在域层声明存储库接口(interface)的部分好处是它指定了域的数据访问要求。
更新
1a) 我不打算将我提到的应用程序服务与“常规”应用程序服务区分开来。如果它是域上的外观,则适用规则。
1b) 可能有些服务仍可称为应用程序服务,但与域没有直接关系,我想排除这些服务。
2a) 如果您所谓的“常规”应用程序服务与域交互,我认为将其作为域“层”的一部分是可以接受的。但是,域不应直接依赖于周围的应用程序服务,因此如果需要,可以将它们拆分为单独的模块。
2b) 是的,因为它可以与分层架构形成对比。一个严格的分层架构并不符合在域层中声明存储库接口(interface)并在基础设施层中实现的想法。这是因为一方面您在一个方向上有依赖性,但就部署而言,依赖性在另一方面。 Hexagonal 通过将域置于中心来解决这些问题。看看onion architecture - 它本质上是六边形,但可能更容易掌握。
2c) 是的,但通常存储库接口(interface)会被应用程序服务引用。
更新 2
2a) 它们可以以不同的方式实现,但一般职责是相同的。主要区别在于依赖图。虽然您可以使用任一架构将应用程序服务分离到它们自己的模块中,但洋葱/六边形架构强调使用接口(interface)来声明对基础设施的依赖关系。
2ba) 是的,这实际上是洋葱架构的一个特征。
b) 是的。在 TLA 中,域层将根据基础设施层声明的类直接与基础设施通信,而不是相反。
c) 是的,基础设施实现了领域层声明的接口(interface)。
d) 耦合是双向的。应用程序核心依赖于基础设施中的实现,基础设施依赖于应用程序核心中声明的接口(interface)。
4)在我看来,您的代码示例是合适的代码。在某些情况下,实体需要访问存储库才能执行某些操作。但是,为了改善此代码的耦合特性,最好定义一个特定的接口(interface)来声明实体所需的功能,或者如果 lambdas 可用甚至更好。然后,存储库可以实现该接口(interface),应用程序服务将在调用给定行为时将存储库传递给实体。这样,实体不依赖于通用存储库接口(interface),而是依赖于非常具体的角色。
DDD 通常以六边形/洋葱式架构风格呈现,这就是为什么可能会有一些混淆的原因。我认为您可能一直在做的事情已经是六边形的,这就是为什么它看起来是一样的。
更新 3
2b) 在 TLA 中不会有接口(interface),或者不是同一种。该域将直接与基础设施(例如持久性框架)通信,因此它将负责持久性。
2d) 如果基础设施拥有接口(interface)和实现,那么域或应用层将负责为它自己实现持久性。在六角形/洋葱中,持久性的实现是基础设施的一部分——它使抽象域“适应”数据库。
4)领域模型可以引用基础设施接口(interface),例如存储库,因为它们是一起声明的。如果应用层从域中分离出来,就像洋葱图中的那样,那么域层可以避免引用接口(interface),因为它们可以在应用层中定义。
更新 4
2d) 该声明不适用于具有层次结构的分层架构,例如:UI -> 业务逻辑 -> 数据访问。业务逻辑层依赖于数据访问层,必须基于数据访问框架的对象模型来实现其数据访问。数据访问框架本身对业务层一无所知。
4) 这篇文章只指定了一种可能的架构。存在可接受的变化。
关于domain-driven-design - 应用层和基础设施层之间的依赖关系有些困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14589641/
下面的说法正确吗? “人最好的 friend 是狗。” public class Mann { private BestFriend dog; //etc } 最佳答案 我想说这样
我一直在 documentation 中查看 Laravel 4 中的关系我正在尝试解决以下问题。 我的数据库中有一个名为“事件”的表。该表具有各种字段,主要包含与其他表相关的 ID。例如,我有一个“
我的表具有如下关系: 我有相互链接的级联下拉框,即当您选择国家/地区时,该国家/地区下的区域将加载到区域下拉列表中。但现在我想将下拉菜单更改为基于 Ajax 的自动完成文本框。 我的问题是,我应该有多
我正在尝试弄清楚如何构建这个数据库。我之前用过Apple的核心数据就好了,现在我只是在做一个需要MySQL的不同项目。我是 MySQL 的新手,所以请放轻松。 :) 对于这个例子,假设我有三个表,Us
MongoDB 的关系表示多个文档之间在逻辑上的相互联系。 文档间可以通过嵌入和引用来建立联系。 MongoDB 中的关系可以是: 1:1 (1对1) 1: N (1对多)
您能解释一下 SQL 中“范围”和“分配单元”之间的区别或关系吗? 最佳答案 分配单元基本上只是一组页面。它可以很小(一页)或很大(很多页)。它在 sys.allocation_units 中有一个元
我有一个表 geoLocations,其中包含两列纬度和经度。还有第二个表(让我们将其命名为城市),其中包含每对唯一的纬度和经度对应的城市。 如何使用 PowerPivot 为这种关系建模?创建两个单
我想用 SQLDelight 建模关系,尤其是 一对多关系。 我有 2 张 table :recipe和 ingredient .为简单起见,它们看起来像这样: CREATE TABLE recipe
我是 Neo4J 新手,我有一个带有源和目标 IP 的简单 CSV。我想在具有相同标签的节点之间创建关系。 类似于... source_ip >> ALERTS >> dest_ip,或者相反。 "d
我正在创建一个类图,但我想知道下面显示的两个类之间是否会有任何关联 - 据我了解,对于关联,ClassA 必须有一个 ClassB 的实例,在这种情况下没有但是,它确实需要知道 ClassB 的一个变
是否可以显示其他属性,即“hasTopping”等? 如何在 OWLViz 中做到这一点? 最佳答案 OWLViz 仅 显示类层次结构(断言和推断的类层次结构)。仅使用“is-a”关系进行描述。 OW
public class MainClass { ArrayList mans = new ArrayList(); // I'm filling in this arraylist,
我想知道“多对二”的关系。 child 可以与两个 parent 中的任何一个联系,但不能同时与两个 parent 联系。有什么办法可以加强这一点吗?我也想防止 child 重复条目。 一个真实的例子
我有一个已经创建的Grails插件,旨在支持许多应用程序。该插件具有一个Employee域对象。问题在于,当在主应用程序中使用该应用程序中的域对象时,需要将其引用回Employee对象。因此,我的主应
我有一个类(class)表、类(class)hasMany部分和部分hasMany讲座以及讲座hasMany评论。如果我有评论 ID 并且想知道其类(class)名称,我应该如何在 LectureCo
我有一个模型团队,包含 ID 和名称。所有可能的团队都会被存储。 我的模型游戏有两列 team_1 和 team_2..我需要哪种关系? 我已经测试了很多,但它只适用于一列.. 最佳答案 也许你可以试
我读了很多关于 ICE 或 Corba 等技术中使用的仆人和对象的文章。有很多资源我可以读到这样的东西: 一个仆人可以处理多个对象(为了节省资源)。 一个对象可以由多个仆人处理(为了可靠性)。 有人可
嗨, 我有一个令人沮丧的问题,我在这方面有点生疏。我有两个这样的类(class): class A{ int i; String j ; //Getters and setters} class B
class Employee { private String name; void setName(String n) { name = n; } String getNam
如果您有这样的关系: 员工与其主管员工之间存在多对一关系 员工与其部门的多对一关系 部门与其经理一对一 我会在 Employee 实体中写入: @ManyToOne (cascade=CascadeT
我是一名优秀的程序员,十分优秀!