我有以下内容:
.NET Core Web 应用程序项目用于拥有一个 GUI,用于编辑作业、查看日志、应用数据库迁移等。
应用程序项目(A 和 B)包含不相关的功能,但两者都应该能够使用调度程序和 Web 应用程序来编辑作业等。
是否有可能以这种方式修改 Web 应用程序项目,即我只能拥有一次代码,然后从两个应用程序项目中“使用”它。比如:
builder.Services.AddMyWebApplication();
...
app.UseMyWebApplication();
或者我拥有一次 Web 应用程序项目并添加插件等应用程序项目(无需事先引用它们)?
这是我目前所了解的,就依赖关系而言(对基本图表示歉意,箭头显示依赖关系 - 例如项目 A“依赖”核心应用程序和 Quartz.Net)。
在核心应用程序中,您有 UI 和逻辑 - 我假设“插件”应用程序(A 和 B)仅集成在核心应用程序的逻辑层。 如果不是这种情况,请告知。
关于你的问题:
是否有可能以这种方式修改Web应用程序项目, 我只能拥有一次代码,然后从两者中“使用”它 应用项目
...还有...
或者我有一次 Web 应用程序项目并添加 像插件这样的应用程序项目(无需同时引用 事先)?
是的。 我认为这基本上是您所需要的 - 让我给您一个图表和一些解释:
我假设核心应用程序的内部逻辑是分层排列的(如果不是,你应该考虑随着时间的推移朝这个方向发展)。 将所有核心逻辑放入一个层中,然后可由 UI 和“插件”项目重用。
理想情况下,这个核心逻辑层不应该对数据库技术或 Quartz.Net 等“外部”有任何依赖 - 我所包含的
Scheduling Interface
是某种代码级接口/合约/依赖注入机制的简写,因此你的核心逻辑没有绑定到 Quartz.Net。 您没有在问题中明确要求这一点,但您可能需要考虑这样做。
必要的部分是避免将插件项目绑定到您的核心逻辑和 Quartz.Net,因为有一天这可能会困扰您。 当插入项目 A 或 B(或 C、D、...Z)时,如果它们只需与您控制的接口集成,就会更容易。 您需要编写的所有 Quartz.Net 逻辑都可以编写一次,而不是在插件项目中编写/重复太多内容。
旁注:如果您了解端口和适配器架构风格(又名六角形),那么与 Quartz.Net 的“对话”将是端口/适配器。 同样的方法也用在 Clean 架构风格中。
您问题的另一部分是关于如何集成插件项目。 我图表上的
A/B Interface
就是这个的简写。
您将设计一个或多个代码级 API(核心逻辑类上的公共方法),这些 API 是专门为要使用的插件项目而设计的。 我不知道您的应用程序到底是做什么的 - 您可能有一个或多个 API,请参阅:接口隔离原则。
这将允许您使用单独的解决方案来做到这一点:
根据您的情况,该架构将允许您开发插件应用程序,然后可以独立部署和并行运行,因此插件项目以及核心应用程序的开发和部署是完全独立的。耦合。