三层应用
Three Tier Application
在 1 层应用程序中,即 Mvc,你得到一个名为 models 的文件夹,你在其中构建和存储你的类,我知道当涉及到三层应用程序时,我读过的内容似乎是正确的将模型存储在业务层(第二层)中,并从 UI(第一层)添加一个项目引用到第二层,这将允许我使用模型并调用方法。
从第二层的角度来看,它会调用数据层(第三层)并对数据库执行 crud 操作,但是数据层需要业务层的模型,所以当我尝试从中添加项目引用时数据层到业务层我得到错误
无法添加对 "Business Layer" 的引用,将此项目添加为引用会导致循环依赖
据我所知,已经通过业务层到数据层进行了引用
我该如何解决这个问题?我如何在数据层中创建额外的模型并用数据库的结果填充它们并将其传回业务层,然后业务层再将其传回 UI?我对此有点困惑。
** 更新 **
从我读到的数据层到业务层内参考模型的内容,我需要进行模型映射,我的模型映射将非常大,所以我正在考虑包括第 4 层,这将是共享库,它将包含所有模型,数据层和业务层可以在需要时访问这些模型。
你的方向是正确的,但我发现将模型层视为数据(第三层)更容易,控制器(业务层,第二层)管理 ui(第一层)和数据层。
如果您以这种方式修改您的体系结构,您应该摆脱循环引用。
这还允许您将数据层对象映射到中间层的适当 less/more 复杂结构,从而简化向 UI 显示的界面并在那里封装业务逻辑也是。
有点跑题但是...
根据您的应用程序的大小,可能没有理由引入不必要的复杂性来尝试遵循您不一定理解的模式。这样做,会让你更加头疼。
话虽这么说,如果您的项目规模很大并且需要一些良好的组织,我强烈建议您进行更多研究,也许还有一些示例项目,您可以在其中尝试您提出的架构。没办法你一次就做对了。
我个人建议研究“洋葱架构”而不是“n-tier”,当然你会发现对此有很多不同的看法。您必须自己做出决定。
这是我要开始的通用设置。
核心。它不知道其他项目。这是您的 类 和 "business" 去的地方。如客户、产品、订单等
数据。它知道核心。它负责接收 Core 对象并将其存储在某个地方。仅此而已。
服务。它知道 Core AND Data。它的工作是公开方法,例如"Create Customer",它将负责创建客户并存储它。
Web/Api/Mvc。这将了解服务。它的工作是向用户公开您的服务。 (UI 等)。 (它可能还知道核心/数据......但这是一个更大的讨论。)
在 1 层应用程序中,即 Mvc,你得到一个名为 models 的文件夹,你在其中构建和存储你的类,我知道当涉及到三层应用程序时,我读过的内容似乎是正确的将模型存储在业务层(第二层)中,并从 UI(第一层)添加一个项目引用到第二层,这将允许我使用模型并调用方法。
从第二层的角度来看,它会调用数据层(第三层)并对数据库执行 crud 操作,但是数据层需要业务层的模型,所以当我尝试从中添加项目引用时数据层到业务层我得到错误
无法添加对 "Business Layer" 的引用,将此项目添加为引用会导致循环依赖
据我所知,已经通过业务层到数据层进行了引用
我该如何解决这个问题?我如何在数据层中创建额外的模型并用数据库的结果填充它们并将其传回业务层,然后业务层再将其传回 UI?我对此有点困惑。
** 更新 **
从我读到的数据层到业务层内参考模型的内容,我需要进行模型映射,我的模型映射将非常大,所以我正在考虑包括第 4 层,这将是共享库,它将包含所有模型,数据层和业务层可以在需要时访问这些模型。
你的方向是正确的,但我发现将模型层视为数据(第三层)更容易,控制器(业务层,第二层)管理 ui(第一层)和数据层。
如果您以这种方式修改您的体系结构,您应该摆脱循环引用。
这还允许您将数据层对象映射到中间层的适当 less/more 复杂结构,从而简化向 UI 显示的界面并在那里封装业务逻辑也是。
有点跑题但是...
根据您的应用程序的大小,可能没有理由引入不必要的复杂性来尝试遵循您不一定理解的模式。这样做,会让你更加头疼。
话虽这么说,如果您的项目规模很大并且需要一些良好的组织,我强烈建议您进行更多研究,也许还有一些示例项目,您可以在其中尝试您提出的架构。没办法你一次就做对了。
我个人建议研究“洋葱架构”而不是“n-tier”,当然你会发现对此有很多不同的看法。您必须自己做出决定。
这是我要开始的通用设置。
核心。它不知道其他项目。这是您的 类 和 "business" 去的地方。如客户、产品、订单等
数据。它知道核心。它负责接收 Core 对象并将其存储在某个地方。仅此而已。
服务。它知道 Core AND Data。它的工作是公开方法,例如"Create Customer",它将负责创建客户并存储它。
Web/Api/Mvc。这将了解服务。它的工作是向用户公开您的服务。 (UI 等)。 (它可能还知道核心/数据......但这是一个更大的讨论。)