相关疑难解决方法(0)

如何在考虑可伸缩性和可测试性的同时将域实体正确地转换为DTO

我已经阅读了几篇文章和Stackoverflow帖子,用于将域对象转换为DTO,并在我的代码中尝试了它们.在测试和可扩展性方面,我总是面临一些问题.我知道以下三种可能的域对象转换为DTO的解决方案.大部分时间我都在使用Spring.

解决方案1:服务层中用于转换的私有方法

第一种可能的解决方案是在服务层代码中创建一个小的"帮助器"方法,该方法将检索到的数据库对象转换为我的DTO对象.

@Service
public MyEntityService {

  public SomeDto getEntityById(Long id){
    SomeEntity dbResult = someDao.findById(id);
    SomeDto dtoResult = convert(dbResult);
    // ... more logic happens
    return dtoResult;
  }

  public SomeDto convert(SomeEntity entity){
   //... Object creation and using getter/setter for converting
  }
}
Run Code Online (Sandbox Code Playgroud)

优点:

  • 易于实施
  • 没有额外的转换类需要 - >项目不会爆炸实体

缺点:

  • 测试时出现问题,如new SomeEntity()在私有方法中使用,如果对象是深层嵌套的,我必须提供足够的结果,when(someDao.findById(id)).thenReturn(alsoDeeplyNestedObject)以避免NullPointers如果convertion也解散了嵌套结构

解决方案2:DTO中用于将域实体转换为DTO的附加构造函数

我的第二个解决方案是在我的DTO实体中添加一个额外的构造函数来转换构造函数中的对象.

public class SomeDto {

 // ... some attributes

 public SomeDto(SomeEntity entity) {
  this.attribute = entity.getAttribute();
  // ... nesting convertion & convertion of lists and arrays …
Run Code Online (Sandbox Code Playgroud)

java junit spring design-patterns spring-boot

20
推荐指数
4
解决办法
1万
查看次数

使用DTO在服务层和UI层之间传输数据

我一直在试图解决这个问题,但是在ASP.NET MVC上这个特定主题的信息似乎很少.我一直在谷歌搜索几天,并没有真正能够解决这个特定的问题.

我有一个3层项目.业务,DAL和UI/Web层.在DAL中是dbcontext,存储库和工作单元.在业务层中是包含所有接口和EF模型的域层.在业务层中,还有一个服务层,其中包含用于EF模型的DTO和用于访问存储库的通用存储库服务.这张照片应该有助于解释它.

我的问题是,我似乎无法弄清楚如何使用DTO从业务层传输数据.

我已经为DTO创建了服务类.我有一个ImageDTO和模型和图像锚点相同.我为每个DTO创建了一个服务类.所以我有一个图像服务和主播服务.这些服务继承存储库服务,并且目前实现自己的服务.但就我而言,那就是那个.由于这些服务具有通过IoC接收IUnitOfWork接口的构造函数,因此我几乎陷入困境.

如果我直接从UI引用服务,一切正常,但我无法理解如何使用DTO将数据从服务层传输到UI层,反之亦然.

我的服务层:

业务/服务/ DTO的

public class AnchorDto
{
      public int Id { get; set; }
      public int x1 { get; set; }
      public int y1 { get; set; }
      public int x2 { get; set; }
      public int y2 { get; set; }
      public string description { get; set; }
      public int  imageId { get; set; }
      public int targetImageId { get; set; }

      public AnchorDto(int Id, int x1, int y1, int x2, …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc repository unit-of-work dto n-tier-architecture

14
推荐指数
1
解决办法
1万
查看次数