我试图找出一种简单的方法来将DTO映射到没有样板代码的实体.虽然我在考虑使用dozer,但似乎需要大量的xml配置.有没有人看过使用DSL在纯Java中配置bean映射的推土机替代方案?
理想情况下,我希望找到一个受Guice做事方式启发的bean映射器.
我正在使用的当前系统利用Castle Activerecord在Domain对象和数据库之间提供ORM(对象关系映射).这一切都很好,在大多数情况下实际上运作良好!
问题出在Castle Activerecords支持异步执行,更具体地说是管理对象所属会话的SessionScope.长话短说,坏事发生了!
因此,我们正在寻找一种方法来轻松转换(自动思考)从Domain对象(谁知道数据库存在和关心)到DTO对象(谁对DB一无所知,不关心会话,映射属性或所有事物) ORM).
有没有人有这样做的建议.首先,我正在寻找对象的基本一对一映射.域对象Person将被映射为PersonDTO.我不想手动这样做,因为它是浪费.
很明显,人们会想到反思,但我希望在这个网站周围有一些更好的IT知识 可以提出"更酷".
哦,我正在使用C#,ORM对象在使用Castle ActiveRecord映射之前说过.
通过@ ajmastrean的请求,我已经链接到一个我(非常)嘲弄在一起的例子.该示例具有捕获表单,捕获表单控制器,域对象,activerecord 存储库和异步帮助程序.它有点大(3MB),因为我包含了运行它所需的ActiveRecored dll.您需要在本地计算机上创建一个名为ActiveRecordAsync的数据库,或者只需更改.config文件.
示例的基本细节:
捕获表格
捕获表单引用了控制器
private CompanyCaptureController MyController { get; set; }
Run Code Online (Sandbox Code Playgroud)
在表单的初始化时,它调用MyController.Load()private void InitForm(){MyController = new CompanyCaptureController(this); MyController.Load(); 这将返回一个名为LoadComplete()的方法
public void LoadCompleted (Company loadCompany)
{
_context.Post(delegate
{
CurrentItem = loadCompany;
bindingSource.DataSource = CurrentItem;
bindingSource.ResetCurrentItem();
//TOTO: This line will thow the exception since the session scope used …
Run Code Online (Sandbox Code Playgroud) 我最近开始了一个新的webforms项目,并决定将业务类与任何DBML引用分开.我的业务层类代替访问离散的数据层方法,并且是DTO的返回集合.因此,数据层可能会像以下一样投影DTO:
(from c in dataContext.Customers
where c.Active == true
select new DTO.Customer
{
CustomerID = c.CustomerID,
Name = c.CustomerName,
...
}).ToList()
Run Code Online (Sandbox Code Playgroud)
虽然构建DTO对象会增加工作量,但这对于业务和数据层之间的紧密绑定感觉更好,这意味着我可以在没有数据库存在的情况下测试业务层.
我的问题是,这是一个好的做法吗?有没有办法生成DTO(可能通过SQLMetal),以及随着项目的进展可能会遇到的其他问题.
我最近参与了几个分布式客户端/服务器项目,我们经常遇到的一个痛点是将DTO对象转换为我们的实体,反之亦然.我想知道是否有人对这个时间下沉有一个"简单"的解决方案?
我想到的一件事就是使用反射来进行某种翻译......我想你必须确保你的属性名称在线的两侧完全相同 - 但看起来它可能会起作用.
只是想找到一种方法来避免一些时间沉入我的开发中.
谢谢!!
我是 Mapstruct 的新手。我有一个场景,在我的目标对象中,我有一个带有键值对 <String,String> 的 java 映射,我必须使用源对象内部对象属性/数据成员值填充这个映射。
我的代码类似于波纹管(虚拟代码):
public class Student {
public String name;
public String rollNo;
public Map<String, String> marks;
}
public class ExamResult{
public String stud_name;
public String Stud_rollNo;
public Marks marks;
}
public class Marks{
public Integer English;
public Integer Maths;
public Integer Science;
}
Run Code Online (Sandbox Code Playgroud)
我将如何手动实现与波纹管相同的事情:
Student target;
ExamResult source;
target.setName(source.stud_name);
target.setRollNo(source.Stud_RollNo);
target.marks.put("ENGLISH",source.marks.english_marks);
target.marks.put("MATHS",source.marks.math_marks);
target.marks.put("SCIENCE",source.marks.science_marks);
Run Code Online (Sandbox Code Playgroud)
对于直接属性映射,我找到了代码,但不确定如何映射要在marks
映射中填充的值。
我曾考虑使用 java 表达式来填充目标映射值,但没有找到任何文档或用于目标对象的表达式示例。
我想像下面这样使用,但不确定它会起作用:
@Mapping(source = "stud_name", target = "name")
@Mapping(source = "Stud_RollNo", target = "rollNo")
@Mapping(source = …
Run Code Online (Sandbox Code Playgroud) 试图自动化一些对象.
源对象在名称之前具有_的属性,目标对象 - 没有.是否可以实现一个地图创建,即automapper会将所有_properties映射到
所有源类型的属性.
class MyMapper<TFrom, TTo>{
TTo PerformMap(TFrom fromObject){
Mapper.CreateMap<From, To>(); // ???
TTo result = Mapper.Map<From, To>(fromObject);
//result.Id.ShouldBe(value from TFrom._Id);
return result;
}
}
class From
{
public int _Id { get; set; }
public string _Name { get; set; }
}
class To
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud) dto-mapping ×6
c# ×2
asp.net ×1
dozer ×1
dto ×1
guice ×1
java ×1
linq ×1
mapstruct ×1
orm ×1
translation ×1
web-services ×1