Entity framework Net应用中的系统架构设计

Entity framework Net应用中的系统架构设计,entity-framework,design-patterns,model-view-controller,ado.net,asp.net-web-api2,Entity Framework,Design Patterns,Model View Controller,Ado.net,Asp.net Web Api2,请找到下面的架构图,这是我的一个客户为一个项目提出的。该项目规模相当大,目前正在使用SOA和ADO.Net(存储过程)进行数据库操作 我不太愿意使用消息服务,因为它会增加额外的层,可能会产生额外的性能问题 请就我下面的问题提供您的意见 (1) 当前架构面临的主要问题 -当长时间运行的stopred过程正在运行时,它也会减慢其他操作。这就是为什么我们将一个大数据库分成多个数据库。 -由于当前应用程序逻辑相当复杂,我们有一个具有复杂查询的存储过程 (1) 是否有可能使用EF并完全替换ADO.Net

请找到下面的架构图,这是我的一个客户为一个项目提出的。该项目规模相当大,目前正在使用SOA和ADO.Net(存储过程)进行数据库操作

我不太愿意使用消息服务,因为它会增加额外的层,可能会产生额外的性能问题

请就我下面的问题提供您的意见

(1) 当前架构面临的主要问题 -当长时间运行的stopred过程正在运行时,它也会减慢其他操作。这就是为什么我们将一个大数据库分成多个数据库。 -由于当前应用程序逻辑相当复杂,我们有一个具有复杂查询的存储过程

(1) 是否有可能使用EF并完全替换ADO.Net。如何替换包含涉及大约20个表的复杂(或大型)查询的存储过程

(2) 当我们有多个数据库时,如何维护横断面,我认为这将是非常困难的

(3) 如果可能的话,请您推荐一些使用类似architecutre的示例或应用程序,以便我可以创建一个试点应用程序并使用我当前的数据库进行测试


相反,我更喜欢下面的体系结构,这是一种微服务体系结构,其中每个应用程序使用通用存储库和EF将数据写入其数据库,并且当应用程序希望彼此对话(即插入/更新/获取数据)时,它将使用消息传递服务。请让我知道哪种方法更好


根据我的经验,通过长时间运行的过程,消息服务实际上解决了您在1)中看到的许多问题

在以前的大型项目中,我使用了
ActiveMQ
RabbitMQ
作为消息传递服务

在一个场景中,我能够通过使用消息传递服务来消除阻塞。因此,业务逻辑不调用存储过程,而是将作业转储到一个队列中,以便稍后处理

在另一个场景中,通过将业务逻辑拆分为相同的工作人员,我能够再次对此进行改进。作业通过消息传递服务以循环方式分配给每个工人。它有效地实现了
竞争消费者模式
。以下是一个很好的解释:

项目规模相当大,目前正在使用SOA

这里的关键词相当大。大型应用程序往往在一段时间后变得混乱(紧密耦合),因此分离非常重要

你将如何做到这一点取决于你的团队知道什么,并且对什么感到满意

根据我的经验,多年来,基于消息传递和CQR构建应用程序往往会占据一席之地,因为实际上将业务领域分开,API比消息传递服务契约更细粒度

我认为,向MVC应用程序公开业务层是错误的,因为这样可以很容易地将它们紧密地结合起来。而是从它们调用服务


服务的名声不好主要是因为人们忘记了他们也应该有一个好的设计。不要让他们成长,也不要让他们成为无所不能的神。保持它们小而清晰。我更喜欢定义业务操作的服务,而不是CRUD操作,特别是如果您希望保护业务层并在数据存储中具有更好的一致性。

如果性能是您的关键标准,EF可能不是正确的选择。这可能是一个很好的妥协。