当前位置: 首页 > 知识库问答 >
问题:

我正确理解端口和适配器/六角结构了吗?

太叔鸿
2023-03-14

我的文件夹结构如下:

>

  • 我的UI的项目

    一个为应用程序核心的项目,它包含应用程序服务、域服务和域模型。

    基础结构的项目,我有一个持久化html" target="_blank">文件夹在那里。

    传递机制可以切换(从控制台应用程序到web应用程序...)而核心也会照样工作。

    同样的基础结构,我可以使用实体框架一次,然后切换到dapper,而不会导致核心的改变。

    到目前为止还不错,还是我错过了一些东西,还是我错过了对架构的最基本的理解?

    如果我有一个控制台应用程序,我必须键入一个命令,它创建一个客户。

    在核心项目中找到的应用程序服务中的类。它使用依赖注入来访问iPersistence的实现。

        public class AddNewCustomer
        {
            private readonly IPersistence _persistence;
    
            public AddNewCustomer(IPersistence persistence)
            {
                _persistence = persistence;
            }
    
            public bool addToDb(customer customer)
            {
                return _persistence.add(customer);
            }
    
        }
    

    端口项目中的接口。

        public interface IPersistence
        {
            bool add(Customer customer);
        }
    
        public class Persistence: IPersistence
        {
            public bool add(customer customer)
            {
               //inserts into DB
            }
        }
    

    端口项目应该严格地与接口有关吗?如何构造端口和适配器项目的结构(文件夹结构)?

  • 共有1个答案

    陈飞语
    2023-03-14

    到目前为止还不错,还是我错过了一些东西,还是我错过了对架构的最基本的理解?

    我会努力正确表达自己。希望能有所帮助。

    端口和适配器体系结构旨在构建html" target="_blank">解耦代码。

    传递机制可以切换(从控制台应用程序到web应用程序...)而核心也会照样工作。

    没关系。控制台和web应用程序是驱动应用程序的适配器。它们使用驱动端口(为外部参与者提供应用程序功能的端口)。

    我可以使用实体框架一次,然后切换到dapper,而不会导致核心的改变。

    六边形:

    [app-name].hexagon.internal=应用程序的内部

    [app-name].hexagon.driver.[driver-port-name]=一个或每个驱动程序端口(应用程序的API)

    我写了一篇关于六边形体系结构的文章,在这里我解释了这个模式,我即将发布一个实现示例。如果你想读它,这里有链接:

     类似资料:
    • 我阅读了Alistair关于六边形模式的文章,并浏览了与此相关的其他资源(Alistair的视频,端口和适配器的简短描述)。 我了解六边形架构的总体思路,以及它给现代应用程序开发带来的优势是什么。但是,我仍然对端口和适配器的实际实现有一些困惑。 问题1: 从阿利斯泰尔的文章中, 在一个实现中,端口和适配器以两种方式出现,我将其称为主要和次要,原因显而易见。它们也可以称为驱动适配器和驱动适配器。 有

    • null 但有件事我在纠结...应用层如何实现到域层的接口?这难道不需要应用程序层知道域层的相互工作吗?这从一开始就完全破坏了使用接口的意义。如果域层提供了一个接口,而该接口的适配器是由使用该接口的层实现的,这将意味着该接口的用户也在实现该接口本身。就像外层在告诉内层如何工作...这违背了去耦合的本质,甚至违背了一般的接口。 对我来说,这似乎很糟糕,因为现在您已经迫使框架层进行验证,这应该是域逻辑

    • 不过,当我发现有必要的时候,我开始稍微尝试应用概念。我发现仍然有许多我不能甚至不考虑应用到我的应用程序中,其中一些是:适配器、命令(CQR?)、事件… 除此之外,我还有点纠结于与六角形建筑有关的东西。我试图应用外部行为应该依赖于内部的定义,所以基础结构层->应用程序层->领域层 在本例中,我将应用程序层中的服务定义为以下LoginService示例:

    • 问题内容: 我一直对会话在内部的工作方式感兴趣,但是我对C的知识很少(并且不确定在PHP源代码中的位置)。 这是我目前对会话的了解: 当您启动会话时,将为用户分配一个会话ID,该ID存储在cookie中。 会话数据保存(通过)后,将与相关的会话ID和到期时间一起存储在文件系统中。 它是否正确?另外,创建会话ID的方法是什么?我认为这是基于时间的,但是如果两个用户同时发送请求该怎么办?内部采用什么方

    • 求后端前辈帮忙看一下我绘制的时序图中,我对数据库锁的理解是否正确??? 今天看见一篇讲解 “先删除缓存还是先更新数据库” 的文章看不懂, 我主要是没搞懂“数据库的‘锁’机制”在“并发删除缓存+更新数据库”这个问题中,究竟是怎么运作的?? 因为我在学习mysql时,了解到进行更新操作时,会加上互斥锁,所以理论上更新和查询操作必定是串行的,但按照这篇文章的描述,似乎出现了“数据库更新操作”与“数据库查

    • 我很难解析JSON的某些内部部分(使用Moshi),这些内部部分可能变化很大,并且高度非结构化。总体看来是: 和数据类结构如下所示: “DataItem”的模式变化很大。看起来Moshi codegen支持适配器,可能允许手动解析这些内部数据类,但我没有找到正确的教程或示例。理想情况下,我希望解析整个响应,就像解析一个定义良好的JSON一样。 以下是我如何使用改装/摩什 我如何实现这一点?任何示例