C# 我应该将DTO和视图模型隐藏在接口或抽象后面吗?
使用IoC可解析接口指定DTO有什么价值 例如:C# 我应该将DTO和视图模型隐藏在接口或抽象后面吗?,c#,asp.net-web-api,dependency-injection,C#,Asp.net Web Api,Dependency Injection,使用IoC可解析接口指定DTO有什么价值 例如: private readonly IGetTransactionsQuery _query; private readonly ICreateTransactionCommand _createCommand; public TransactionsController( IGetTransactionsQuery query, ICreateTransactionCommand createCommand) { _qu
private readonly IGetTransactionsQuery _query;
private readonly ICreateTransactionCommand _createCommand;
public TransactionsController(
IGetTransactionsQuery query,
ICreateTransactionCommand createCommand)
{
_query = query;
_createCommand = createCommand;
}
[EnableQuery]
public IQueryable<ITransactionQueryModel> Get()
{
return _query.Execute();
}
public async Task<IHttpActionResult> Post(ICreateTransactionModel transaction)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
await _createCommand.Execute(transaction);
return Created(transaction);
}
private readonly IGetTransactionsQuery\u查询;
私有只读ICreateTransactionCommand _createCommand;
公共事务控制员(
IGetTransactionsQuery查询,
ICreateTransactionCommand(创建命令)
{
_查询=查询;
_createCommand=createCommand;
}
[启用查询]
公共IQueryable Get()
{
返回_query.Execute();
}
公共异步任务Post(ICreateTransactionModel事务)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
wait_createCommand.Execute(事务);
创建的退货(交易);
}
这里,我使用ITransactionQueryModel和ICreateTransactionModel,而不是具体化。这里有商业价值吗?哪些场景可以从这种方法中受益?我可以想到一些,但我想对用例场景达成一些共识
注意:我只是指控制器的“动作”方法,而不是构造函数,使用IoC的好处显而易见。使用接口有两个常见原因:
Id
属性。您可以定义包含此Id
的IEntity
接口或实体
基本类型。这允许您定义在基类型或接口上操作的方法,而不必为系统中的每个实体反复指定它们
但是,在DTO的情况下,不太可能有其他具有相同属性集的DTO。顾名思义,这是一组定义“事务查询模型”的数据。换句话说,您将在
ITransactionQueryModel
抽象和实现之间有一对一的映射。这几乎毫无用处。使用接口有两个常见原因:
Id
属性。您可以定义包含此Id
的IEntity
接口或实体
基本类型。这允许您定义在基类型或接口上操作的方法,而不必为系统中的每个实体反复指定它们
但是,在DTO的情况下,不太可能有其他具有相同属性集的DTO。顾名思义,这是一组定义“事务查询模型”的数据。换句话说,您将在
ITransactionQueryModel
抽象和实现之间有一对一的映射。这几乎肯定是无用的。您从中获得的一个即时好处的可测试性。松散耦合和依赖注入的主题在本文中值得一读。所以,你实际上要问的是:什么是和。@史蒂文,如果我问在一英亩的岛上拥有一辆车有什么好处,我不是在问拥有一辆车有什么好处。这不是一个新手问题,但感谢谷歌的搜索链接……以防万一我忘了如何使用itAh,好吧,我想我明白你的意思了(标题很混乱)。为数据对象创建抽象通常没有任何价值。抽象意味着隐藏行为,但数据对象(如DTO)没有任何行为,因此为它们创建抽象通常是没有用的,特别是当只有一个实现时。@Steven请在回答中发布此回复,我也会将其标记为“已接受”,请随意编辑标题,以明确您从中获得的一个即时好处的可测试性。松散耦合和依赖注入的主题在本文中值得一读。所以,你实际上要问的是:什么是和。@史蒂文,如果我问在一英亩的岛上拥有一辆车有什么好处,我不是在问拥有一辆车有什么好处。这不是一个新手问题,但感谢谷歌的搜索链接……以防万一我忘了如何使用itAh,好吧,我想我明白你的意思了(标题很混乱)。为数据对象创建抽象通常没有任何价值。抽象意味着隐藏行为,但数据对象(如DTO)没有任何beh