我有一个WCF服务,刚刚为业务对象创建了一个DTO.
我的问题是在哪里放置两者之间的映射?
A)在DTO?
public class PersonDTO
{
[DataMember] public string Id { get; set; }
[DataMember] public string Name { get; set; }
public void CloneFrom(Person p)
{
Id = p.Id;
Name = p.Name;
}
public void Populate(Person p)
{
p.Id = Id;
p.Name = Name;
}
}
Run Code Online (Sandbox Code Playgroud)
要么
B)在业务对象中?
public class Person
{
public string Id { get; set; }
public string Name { get; set; }
public void CloneFrom(PersonDTO dto)
{
Id = dto.Id;
Name = dto.Name;
} …Run Code Online (Sandbox Code Playgroud) 我们有两个具有客户端 - 服务器架构的Spring Boot应用程序.后端配置了Spring Data REST + JPA.前端应该消耗后端公开的资源并提供公共REST API.
是否可以通过声明例如mapper bean使Spring数据自动从DTO映射到域对象?
// JPA persistable
@Entity
public class Order { .. }
// Immutable DTO
public class OrderDto { .. }
// Is this somehow possible..
@RepositoryRestResource
public interface OrderDtoRepository extends CrudRepository<OrderDto, Long> {}
// .. instead of this?
@RepositoryRestResource
public interface OrderRepository extends CrudRepository<Order, Long> {}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用libusb1.0.9实现用户空间usb驱动程序.我有lpc2148蓝板(ARM7)和我一起使用.这个主板是由Bertrik Sikken先生装载的开源USB堆栈/固件.现在我的用户空间驱动程序尝试用板写读.我正在获取垃圾数据.我想了解批量转运的流程.对于任何传输/事务是否涉及内核设备驱动程序?我们还需要usb小工具设备驱动吗?我无法理解数据被复制的位置.重要的是,当我读/写中断生成时,我可以在LCD上看到正确的数据.我需要读/写USBRxData/USBTxData吗?请做必要的.
我尝试了以下代码进行批量传输读写.
int usb_read(struct libusb_device *dev,struct libusb_device_handle *hDevice)
{
char *data,*data1;
struct libusb_endpoint_descriptor *ep;
struct libusb_interface_descriptor *id;
int len=64,r,ret_alt,ret_clm,ret_rst,i;
struct libusb_device **list;
data = (char *)malloc(512); //allocation of buffers
data1 = (char *)malloc(512);
memset(data,'\0',512);
memset(data1,'\0',512);
if(hDevice==NULL)
{
printf("\nNO device found\n");
return 0;
}
int ret_open = libusb_open(dev,&hDevice);
if(ret_open!=0)
{
printf("Error in libusb_open\n");
libusb_free_device_list(list,1);
return -1;
}
char str_tx[512]="G"; //data to send to device
char str_rx[512]; //receive string
data = str_tx;
printf("data::%s\t,str::%s\n",data,str_tx);
//printf("%c\n",data);
ep = active_config(dev,hDevice);
printf("after ep\n");
//printf("alt_interface = …Run Code Online (Sandbox Code Playgroud) 我在我的业务对象中定义了一个枚举。
该枚举虽然是在数据传输对象中定义的。
dto 枚举不是业务对象的类型,因为它们不应该互相了解。
当我现在从客户端获取此 dto 并将 dto 映射到业务对象并将数据插入数据库时,我想断言传递的 dto.enum 具有与数据库中插入的枚举值相同的值。
这是我收到的错误消息:
Expected: A
But was: A
Run Code Online (Sandbox Code Playgroud)
实际上它们具有相同的值但不同的类型:dto.enum 与businessobject.enum。
那么你会在哪里定义这个枚举,那么两个对象都可以它并且两个对象彼此之间没有耦合?
我考虑在我的业务层和 dto AND 业务对象使用的枚举定义中放置一个额外的 C# 类,以便断言能够工作。
你会怎么办?
我是DDD和OO原则的新手,抱歉我的知识不足.
我有CustomerDTO和Customer课程.
我存储在所有字段和属性DTO类,并把它作为基类的客户类.
使用DTO的主要目的是将其传递给View.我已经在Customer类中扩展它,不会重复属性.
这是做正确的方法还是有更好的OO解决方案?
我已经阅读了AutoMapper,但我想知道,如果有替代解决方案.
非常感谢任何帮助.
我正在使用这个食谱配方在Symfon 2.1中添加数据转换器,但是我收到以下错误,The option "em" does not exist. Known options are: "attr", "block_name",....
这仍然是将实体管理器发送到表单类型的有效方法吗?
$taskForm = $this->createForm(new TaskType(), $task, array(
'em' => $this->getDoctrine()->getEntityManager(),
));
Run Code Online (Sandbox Code Playgroud) 我正在使用MapStruct进行dto <-> entity映射。相同的映射器用于从dto 创建 和 更新实体。完成dto的id验证以了解是否必须创建一个新实体(id == null)还是应该从数据库中检索它(id!= null)。
我实际上正在使用MapperDecorator作为解决方法。范例:
@Mapper
@DecoratedWith(UserAccountDecorator.class)
public interface UserAccountMapper {
UserAccountDto map(User user);
User map(UserAccountDto dto);
User map(UserAccountDto dto, @MappingTarget User user);
}
Run Code Online (Sandbox Code Playgroud)
public abstract class UserAccountDecorator implements UserAccountMapper {
@Autowired
@Qualifier("delegate")
private UserAccountMapper delegate;
@Autowired
private UserRepository userRepository;
@Override
public User map(UserAccountDto dto) {
if (dto == null) {
return null;
}
User user = new User();
if (dto.getId() != null) {
user = …Run Code Online (Sandbox Code Playgroud) 我对 NestJS 完全陌生。我已经看到,在 NestJS 中,创建了一个模型来指定数据的详细信息,例如,当创建一个简单的任务管理器时,当我们想要指定单个任务的外观时,我们在模型中指定它(下面的示例):
export interface Task {
id: string;
title: string;
description: string;
status: TaskStatus;
}
export enum TaskStatus {
OPEN = 'OPEN',
IN_PROGRESS = 'IN_PROGRESS',
DONE = 'DONE',
}
Run Code Online (Sandbox Code Playgroud)
然而,后来我遇到了 DTO,其中再次描述了数据的形状。我的理解是,DTO 在传输数据时使用,即它描述了您将发布或获取的数据类型。
我的问题是,当我已经使用 DTO 来描述数据的形状时,为什么还要使用模型?
另外,我读到,通过 DTO,我们可以拥有单一事实来源,并且如果我们意识到数据结构需要更改,我们不必在控制器和服务文件中单独指定它,但这仍然意味着我们必须更新模型吗?
任何人都可以在下面的段落中告诉我API的含义,这实际上是关于Transfer Object:
如果可能要求业务服务在大粒度粗粒度消息中发送或接收其全部或大部分数据,则该服务通常会在其API中提供该功能.
提前致谢.
我正在尝试一个示例应用程序来测试依赖注入.在使用DI之前,我的课程中有以下方法:
public IQueryable<BookDTO> GetBooks()
{
var books = from b in db.Books
select new BookDTO()
{
Id = b.Id,
Title = b.Title,
AuthorName = b.Author.Name
};
return books;
}
Run Code Online (Sandbox Code Playgroud)
BookDTO是另一个项目中定义的数据传输对象.现在我想把我的项目松散地结合在一起.所以我创建了IDTOBase接口并使BookDTO实现了这一点.我有一个统一容器,我已经将BookDTO类的相关注册到IDTOBase.
但是,如何在原始方法中重写LINQ查询?什么将取代"新BookDTO()"?
谢谢
c# linq dependency-injection data-transfer-objects unity-container