trn*_*son 1 .net architecture asp.net design-patterns asp.net-web-api
我正在使用ASP.NET Web API创建一个可插拔的项目框架.我有很多胆量已经弄明白但是我对架构的一部分有问题,我不完全确定如何解耦.
作为简化示例,我有以下内容:
现在,服务都引用了Domain层,因为它有接口,帮助器等.但是,Domain层也引用了ASP.NET Web API 2.1等内容.我的想法是在域中有一个基础"BaseController",每个服务的控制器都可以从中继承,反过来都必然会继承像Get(),Post()等有线的东西.问题是我不希望每个服务都必须引用ASP.NET Web API 2.1和其他依赖项.我希望他们能够通过抽象来使用它们而不直接引用它们.换句话说,我想要更宽松的耦合,并希望服务能够自主地生活并独立于System.Web.Http.随着项目的发展,它将帮助我实施单元测试和SOLID原则.
也许我在这里采取了错误的方法,但也许不是.我的主要目标是使用ASP.NET Web API创建一个可插入的微服务框架,每个微服务都作为一个独立的程序集.所以,如果有另一种推荐方法,我会全力以赴.
希望这是有道理的.有什么指针吗?对于它的价值,我对设计模式和SOLID原则的概念非常熟悉; 只是不确定如何将这一切串在一起,同时保持控制器本身提供的一些自动请求处理.
谢谢!
你的意图很棒,实施不是那么多.您实际上称为Application Services,即使用Domain实现应用程序用例的服务.当你说你不想加入System.Web.Http等时,我想你想说你不希望你的应用程序(特别是Domain)加入WebApi框架.
我认为你误解了解耦意味着什么.它不是关于一个不依赖于另一个的程序集,而是关于不将对象/层耦合到其他对象/层的实现细节.这就是为什么Domain 永远不会知道控制器,WebApi,Mvc等他们不是域的一部分,他们是UI或公共API的一部分.
只是API层(一个名称巧合)应该知道控制器和你正在使用的任何框架(顺便说一下WebApi),其他任何只知道他们的关注点.所以API(使用) - >应用层 - >域.
拥有自治组件是可以的,但你真的不希望只有一个程序集来处理所有事情.保持清洁,并有类似的东西:
这只是一个建议,重要的是要将问题分开.
这是一些代码
public class MyAppService
{
public void DoSmth(InputData data){}
}
public class MyApiController
{
public MyApiController(MyAppService svc) { }
public void Post(SomeModel model)
{
var svcInput=model.ToServiceInput();
_svc.DoSmth(svcInput);
}
}
Run Code Online (Sandbox Code Playgroud)
您的应用服务从控制器获取输入模型并使用它来完成其工作.服务永远不会知道webApi或任何东西,只关于输入模型.事情是分离的,易于测试.
归档时间: |
|
查看次数: |
1383 次 |
最近记录: |