【问题标题】:C# Web APIs: package by featureC# Web API:按功能打包
【发布时间】:2014-11-30 20:49:11
【问题描述】:

我想拆分我的 C# Web API 项目,以便在单独的项目中维护给定的功能(或一组功能)。理想情况下,我仍然希望在每个功能包中保持分层分离。

示例:我想确保每个主要功能都有一个单独的 API 项目(即,业务套件将分为销售 API、库存 API、工资 API 等)。每个功能将分为 API(顶层)、模型(从/向 API 发送和接收的 DTO/ViewModel)、服务(业务逻辑)和测试。可能有更多层,即实体类等的单独层。

在这些项目中,必须在顶层(例如错误处理、日志记录等)和其他层(数据库连接、存储库...)上重用一定数量的共享代码。

有没有人有一个很好的例子来说明如何进行这种分离,这样一切都是 DRY,同时保持特征的清晰分离?

最好的问候, 丹尼尔

【问题讨论】:

  • 理想情况下,这种分离会一直延伸到数据库,这样给定的特性就可以拥有自己的数据库。显然,这可能会导致数据库架构发生变化,其中以前可用于功能 A 的数据不再可用,因为它在技术上属于功能 B。

标签: c# package asp.net-web-api


【解决方案1】:

您尝试实现的目标听起来非常类似于微服务架构。这里有一些很好的链接来描述这意味着什么..

http://blog.cleancoder.com/uncle-bob/2014/09/19/MicroServicesAndJars.html

http://martinfowler.com/articles/microservices.html#CharacteristicsOfAMicroserviceArchitecture

我们的想法是在模块化庄园中构建您的系统,其中每个组件都可以相互通信,通常通过 HTTP。这似乎是您想要通过每个都公开一个 API 的“功能”来实现的目标。这方面有一大堆材料,所以我会阅读它。

至于在它们之间共享代码,这可能很棘手。如果您从模块化系统的角度来考虑这一点,那么共享的东西可能应该是它自己的“功能”/“组件”/“服务”/“模块”(无论你想怎么称呼它)。或者,您可能只是想将一些东西提取到自己的项目中——如果是这样,请考虑构建一个 Nuget 包以在组件之间共享通用代码?

【讨论】:

猜你喜欢
  • 2021-10-16
  • 2012-07-28
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 2021-10-06
  • 2018-07-10
  • 1970-01-01
  • 2016-01-20
相关资源
最近更新 更多