【发布时间】:2015-05-19 16:21:33
【问题描述】:
我目前正在开发一个大型 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?依赖注入也不应该是重点。
任何启蒙都会非常有帮助。最后学习新的东西和方法总是好的......
【问题讨论】:
-
如果您不需要接口,就没有理由使用它。这使应该是一个简单的对象过于复杂。
-
如果 DTO 只是一个属性列表,我认为这毫无意义。例如,如果您有某种存储库,那么您将连接它以替换数据库连接以获取虚假表示。如果你有
Person GetPerson(),你可以有DB版本和Fake版本。 -
您可能会在 DTO (
FooDto : IAmADto) 上弹出一个标记接口,用于类型约束和映射,但除此之外,它的用途是什么?这里没有抽象,取决于IPerson为您提供与取决于Person完全相同的耦合级别。