标签: dto

表数据网关和数据访问对象架构差异

有人可以描述表数据网关(TDG)和数据访问对象(DAO)之间的主要区别吗?

TDG可以操作该表的所有行,但DAO也可以(DAO可以保存、删除指定对象,也可以对整个表进行操作)

问候

architecture dao dto

5
推荐指数
1
解决办法
1482
查看次数

处理服务或 DAO 中的聚合

关于设计合适的 DAO 的讨论总是如此流行,其结论总是“DAO 应该只执行简单的 CRUD 操作”。

那么执行聚合等操作的最佳位置是什么?DAO 是否应该返回类似于数据源架构的复杂对象图?

假设我有以下 DAO 接口:

public interface UserDao {
    public User getByName(String name);
}
Run Code Online (Sandbox Code Playgroud)

这是它返回的对象:

public class Transaction {
    public int amount;
    public Date transactionDate;
}

public class User {
    public String name;
    public Transaction[] transactions;
}
Run Code Online (Sandbox Code Playgroud)

首先,我认为如果 DAO 所做的只是 CRUD 操作,那么它会返回一个标准值对象。

所以现在我已经通过 DAO 建模来返回基于数据存储关系的东西。它是否正确?如果我有更复杂的对象图怎么办?

更新:我想我在这一部分中要问的是,DAO 的返回值(无论是 VO、DTO 还是任何您想要的名称)是否应该按照数据存储的数据表示进行建模?或者我应该引入一个新的 DAO 来获取用户的交易,并为 UserDAO 拉取的每个用户调用 TransactionDAO 来获取它们?

其次,假设我想对用户的所有交易执行聚合。使用这个 DAO,我可以简单地获取一个用户,并在我的服务循环中遍历事务数组并自己执行聚合。毕竟,说这样的聚合是属于服务的业务规则是完全合理的。

但如果用户的交易数量达到数万怎么办?这会对应用程序性能产生负面影响。在 DAO 上引入一种执行上述聚合的新方法是否不正确?

当然,这可能是假设 DAO 由数据库备份,我可以在其中编写简单的 SELECT SUM() 查询。如果 DAO 实现更改为平面文件或其他内容,我无论如何都需要在内存中进行聚合。

那么这里的最佳实践是什么?

java dao design-patterns dto

5
推荐指数
1
解决办法
1418
查看次数

DTO 不应该知道业务对象内的枚举

我在我的业务对象中定义了一个枚举。

该枚举虽然是在数据传输对象中定义的。

dto 枚举不是业务对象的类型,因为它们不应该互相了解。

当我现在从客户端获取此 dto 并将 dto 映射到业务对象并将数据插入数据库时​​,我想断言传递的 dto.enum 具有与数据库中插入的枚举值相同的值。

这是我收到的错误消息:

Expected: A

  But was:  A
Run Code Online (Sandbox Code Playgroud)

实际上它们具有相同的值但不同的类型:dto.enum 与businessobject.enum。

那么你会在哪里定义这个枚举,那么两个对象都可以它并且两个对象彼此之间没有耦合?

我考虑在我的业务层和 dto AND 业务对象使用的枚举定义中放置一个额外的 C# 类,以便断言能够工作。

你会怎么办?

c# data-transfer-objects dto

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

将 Json 转换为 DTO 数组

我有一个有趣的 JSON 解析问题,至少对我来说是这样,因为我是第一次这样做。我有以下示例 JSON,我想将其映射到等效的 DTO:

{
    "modules":
    [
        {
            "name":"module1",
            "shortId":23425,
            "pmns":
            [
                {
                    "name":"pmn1",
                    "position":1,
                    "pmnType":"D3"
                },
                {
                    "name":"pmn3",
                    "position":3,
                    "pmnType":"R2"
                },
                {
                    "name":"pmn7",
                    "position":5,
                    "pmnType":"S1"
                },
            ]
        },
        {
            "name":"module2",
            "shortId":1572,
            "pmns":
            [
                {
                    "name":"pmn1",
                    "position":3,
                    "pmnType":"D3"
                },
                {
                    "name":"pmn12",
                    "position":35,
                    "pmnType":"R2"
                },
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是我的 ModuleDTO 类:

public class ModuleDTO {

    private String _name;
    private short _shortId;
    private PmnDTO[] _pmns;

    public String getName() {
        return _name;
    }

    public short getShortId() {
        return _shortId;
    }

    public …
Run Code Online (Sandbox Code Playgroud)

java json dto jackson toarray

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

javax.persistence.PersistenceException:org.hibernate.MappingException:未知实体:it.*.PoolStateResult | 将结果映射到 DTO(而不是实体)

使用:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.5.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>1.5.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>1.5.8.RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
Run Code Online (Sandbox Code Playgroud)

这是我的 DTO。它不是数据库上的实体。我只想用它来绘制地图

public class PoolStateResult {

    private Integer totalCodes;
    private Integer assignedCodes;
    private Integer availableCodes;

    private Date startDateValidate;
    private Date endDateValidate;

constructors
getters and setters
Run Code Online (Sandbox Code Playgroud)

这是DAO的内容

    Query q = em.createNativeQuery("  SELECT p.start_validity_date as startDateValidate, "
            + " p.end_validity_date as endDateValidate, "
            + " (SELECT count(*) from POOL_CODES p WHERE …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa pojo dto

5
推荐指数
1
解决办法
4209
查看次数

如何使用 TypeScript 中的接口映射 DTO?

我正在尝试在打字稿中实现态射/DTO 映射概念。

\n\n

简要概述态射的概念,态射是指从一种数学结构到另一种数学结构的结构保持映射。\n具有源 X 和目标 Y 的态射 f 写作 f : X \xe2\x86\x92 Y。

\n\n

更多关于https://en.wikipedia.org/wiki/Morphism

\n\n

我正在尝试使用态射的 StrictSchema 以通用方式进行复杂类型对象(即包含另一个对象和对象数组的对象)的源到目标映射。请参阅下面提供的链接以获取有关 morphism npm 包的更多信息。\n https://github.com/nobrainr/morphism

\n\n

我的界面

\n\n
            interface IFoo {  \n                  keyA: {\n                  key1: number,\n                  key2: number,\n                  key3: [\n                    {\n                      key3A: string,\n                      key3B: number\n                    }\n                  ],\n                  key4: string\n                },\n                keyB: string,\n                keyC: number,\n                keyD: {\n                  key1: string,\n                  key2: {\n                    key2A: string\n                  },\n                  key3: string\n                },\n                keyE: string\n            }\n\n\n            const schema: StrictSchema<IFoo> = \n            {  keyA: {\n                  key1: \'somepath\',\n …
Run Code Online (Sandbox Code Playgroud)

dto typescript

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

QueryDSL - 一对多关系的 DTO 投影

我正在考虑使用 DTO 投影 - 我有两个具有一对多关系的实体(EntityOne 的一个实例链接到 EntityTwo 的多个实例),并且我想将结果作为新的 DTO 对象返回 - 我的内容我目前正在尝试的是这样的:

query.select(Projections.constructor(MyDtoObject.class,
            entityOne, list(entityTwo)))
        .from(entityOne, entityTwo)
        .where(......)
Run Code Online (Sandbox Code Playgroud)

MyDtoObject 看起来像这样:

public class MyDtoObject {

    private EntityOne entityOne;
    private Collection<EntityTwo> entityTwoCollection 

   // getters, setters and an all args constructor method here

}
Run Code Online (Sandbox Code Playgroud)

然而,这会带回比预期多得多的 MyDtoObjects,而且看起来每个 MyDtoObjects 只保存一个entityTwo 对象而不是一个集合。

如何指示 queryDSL 创建具有多个entityTwo 条目的 MyDtoObjects 结果对象?list(..) 方法在我上面的场景中是否执行任何操作?

java dsl jpa dto querydsl

5
推荐指数
1
解决办法
6141
查看次数

如何在 api-platform 中为 Dto 模型提供自定义名称?

当我在 api 文档的模型中使用 Dto 时,Dto 的名称记录如下,Customer: 01d691680190c1b19dfee75af0f2e292,可以将此名称自定义为 Customer: Input 或其他任何名称。

这是我的资源配置:

App\Entity\Customer\Customer:
collectionOperations:
    register:
        method: POST
        path: /register
        controller: App\Controller\ShopApi\Customer\RegisterCustomerAction
        input:
            class: App\Dto\RegisterCustomerRequest
            name: RegisterCustomerRequest
itemOperations:
    get:
        normalization_context:
            jsonld_embed_context: true
            groups: ['customer:read']
            swagger_definition_name: CustomerResponse
Run Code Online (Sandbox Code Playgroud)

但是后来在 api doc 中我得到了一个模型:

Customer:01d691680190c1b19dfee75af0f2e292 {
email*  string
plainPassword*  string
firstName*  string
lastName*   string
gender* string
identificationNumber*   string
typeIdentificationNumber*   string
subscribedToNewsletter  boolean
confirmTermsConditions  boolean
addressAlias    string
address*    string
countryCode*    string
provinceCode    string
provinceName    string
city*   string
postcode*   string
phoneNumber*    string  }
Run Code Online (Sandbox Code Playgroud)

dto api-platform.com

5
推荐指数
0
解决办法
112
查看次数

Reactor:如何将实体的通量转换为 DTO 对象的通量

我有一个 User 实体和一个 Role 实体。除了 User 实体具有对应于其各自角色的 id 的 role_id 字段这一事实之外,这些字段并不重要。由于 Spring Data R2DBC 不会在实体之间建立任何形式的关系,因此我转向 DTO 方法。我对 R2DBC 和响应式编程非常陌生,我一生都无法弄清楚如何将Flux<User>我的存储库的 findAll() 方法返回到Flux<UserDto>. 我的 UserDto 类非常简单:

@Data
@RequiredArgsConstructor
public class UserDto 
{
    private final User user;

    private final Role role;
}
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试创建的 UserMapper 类:

@Service
@RequiredArgsConstructor
public class UserMapper 
{
    private final RoleRepository roleRepo;

    public Flux<UserDto> map(Flux<User> users)
    {
        //???
    }
}
Run Code Online (Sandbox Code Playgroud)

如何让这个映射器将 aFlux<User>转换为Flux<UserDto>包含用户各自角色的 a ?

谢谢!

java dto reactive-programming project-reactor spring-data-r2dbc

5
推荐指数
1
解决办法
4860
查看次数

Mapstruct 多对一映射

我对 mapstruct 中的 @ManyToOne 映射有疑问。我有两张桌子

第一个:

@Entity
@Table(name = "members", schema = vsm)
public class MemberEntity{

    @Column(name = "id", nullable = false)
    protected Long id;

    @ManyToOne(optional = false)
    @JoinColumn(name = "case_id", nullable = false)
    private CaseEntity case;
}
Run Code Online (Sandbox Code Playgroud)

第二个:

@Entity
@Table(name = "cases", schema = vsm)
public class CaseEntity {

    @Column(name = "id", nullable = false)
    protected Long id;

    @Column(name = "description", nullable = false)
    protected String description;
}
Run Code Online (Sandbox Code Playgroud)

我有一个像这样的案例:

public class CasesDto{

    protected Long id;

    protected String description;

    private …
Run Code Online (Sandbox Code Playgroud)

java entity hibernate dto mapstruct

5
推荐指数
1
解决办法
2784
查看次数