DTO的接口

时间:2015-05-19 16:21:33

标签: c# interface dto

我目前正在开发一个大型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吗?依赖注入也应该不是重点 任何启示都会非常有帮助。最后,学习新东西和方法总是很好......

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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和一些模拟对象进行测试。

答案 2 :(得分:0)

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

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

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

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

因此,您也必须考虑api将会如何。