DTO的接口

问题描述 投票:12回答:3

我目前正开始开发大型Web应用程序,该应用程序主要包含Angular SPA和可访问后端层的OData WebAPI。我们还处于早期阶段,已经开始实现第一个类,其中包括位于公共名称空间中的Model.dll,以便所有层都可以访问它。现在,我们正在讨论模型中的那些DTO。有人说使用接口是绝对必要的,因此代码如下:

namespace MySolution.Common.Model
{
    public interface IPerson
    {
        int Id { get; set; }
        string Name { get; set; }
        ...
    }
}

namespace MySolution.Common.Model
{
    public class PersonDTO : IPerson
    {
        public int Id { get; set; }
        public string Name { get; set; }
        ...
    }
}

就这样。只是没有更多情报的简单DTO。我现在正在问自己这是否真的是一种好方法,因为我看不到在这里使用该接口的必要性。这有什么好处?提到了可测试性,但是否有必要测试DTos?依赖注入也不应该是重点。任何启示都会非常有帮助。最后,学习新的东西和方法总是好的...

c# interface dto
3个回答
6
投票

DTO转移状态-就是这样。通过容器注入它们或模拟它们进行测试似乎毫无意义(如果这样做的话),并且完全没有必要。不要这样做。


3
投票

例如,除了上面我的评论:

Interface IRepo
{
  Person GetPerson(int id);
}

Public class DbRepo : IRepo
{
  public Person GetPerson(int id){//get person from database}
}

Public class FakeRepo : IRepo
{
  public Person GetPerson(int id)
  {
    return new Person {Id = id, Name = "TestName"};
  }
}

您将FakeRepo与某些模拟对象一起使用以进行测试。


0
投票

我有这种情况,我正在编写一个应该松散耦合的api,因为我可以使它的任何部分适应不同的行为,例如更改存储,或更改请求中的多个参数,因此它可以有另一种行为而不影响已经存在的行为。

考虑到这一点,为DTO提供一个接口是有效的,因为在另一时间它可以更改其属性以承载更多数据,并且您只需实现一个抽象,就可以使用此新实现的dto进行映射。新参数,用于服务中的记录记录。

然后您将接口(抽象)绑定到dto的新实现以及将要进行修改的位置。

那么您就不会更改程序的行为,也不会对已经存在的内容进行更改。

所以您也必须考虑您的api将会如何。

© www.soinside.com 2019 - 2024. All rights reserved.