C# DTO-POCO转换

C# DTO-POCO转换,c#,poco,dto,n-tier-architecture,C#,Poco,Dto,N Tier Architecture,我有几个DTO和相应的POCO 建议在它们之间进行转换的方式是什么,以及转换函数的位置 我最初的想法是将两个转换函数放在POCO中,并将它们称为ToPOCO和ToDTO 但是,有没有更好的方法,或者创建一个扩展方法 谢谢, 了解想法。查看为您提供此功能的库: 自动映射器: 我个人最喜欢使用隐式转换操作。我必须补充一点,我只在将来重构后打算移除“粘合”层时才使用它。在生产环境中,这可能不是一个长期的解决方案(因为它的含蓄性使它很容易被忽略) 查看为您提供此功能的库: 自动映射器: 我个人最

我有几个DTO和相应的POCO

建议在它们之间进行转换的方式是什么,以及转换函数的位置

我最初的想法是将两个转换函数放在POCO中,并将它们称为ToPOCO和ToDTO

但是,有没有更好的方法,或者创建一个扩展方法

谢谢,
了解想法。

查看为您提供此功能的库:

  • 自动映射器:
我个人最喜欢使用隐式转换操作。我必须补充一点,我只在将来重构后打算移除“粘合”层时才使用它。在生产环境中,这可能不是一个长期的解决方案(因为它的含蓄性使它很容易被忽略)


查看为您提供此功能的库:

  • 自动映射器:
我个人最喜欢使用隐式转换操作。我必须补充一点,我只在将来重构后打算移除“粘合”层时才使用它。在生产环境中,这可能不是一个长期的解决方案(因为它的含蓄性使它很容易被忽略)


有趣的是,你忘了提到语言/平台。从你处理事情的方式来看,我猜是Java,但看到命名,我猜是C#如果我错了,请纠正我,但DTO和POCO不是几乎同义吗?@doogle我的理解是DTO不具备功能。他们只是他们所说的;数据传输对象。它们是可序列化的,因此可以通过SOAP服务进行传输。POCO是标准的域实体,包括构造函数和更具体的行为。这些对象不会序列化,因此在此上下文中对“传输”毫无用处。有趣的是,您忽略了提及语言/平台。从你处理事情的方式来看,我猜是Java,但看到命名,我猜是C#如果我错了,请纠正我,但DTO和POCO不是几乎同义吗?@doogle我的理解是DTO不具备功能。他们只是他们所说的;数据传输对象。它们是可序列化的,因此可以通过SOAP服务进行传输。POCO是标准的域实体,包括构造函数和更具体的行为。这些对象不会序列化,因此在此上下文中对“传输”毫无用处。
public class MyPoco
{
    public static implicit operator MyPoco(MyDTO o)
    {
        if (o == null) return null;
        return new MyPoco {
            SomeAmount = Convert.ToDecimal(o.SomeAmount),
            SomeBool   = Equals("Y", o.SomeBool     ),
            Sub1       = o.Sub1,
            Sub2       = o.Sub2,
        };
    }
    public static implicit operator MyDTO(MyPoco o)
    {
        if (o == null) return null;
        return new MyDTO {
            SomeAmount = o.SomeAmount.ToString(),
            SomeBool   = o.SomeBool     ? "Y":"N",
            Sub1       = o.Sub1,
            Sub2       = o.Sub2,
        };
    }
    public decimal SomeAmount   { get; set; }
    public bool SomeBool        { get; set; }
    public MySubPoco1 Sub1      { get; set; }
    public MySubPoco2 Sub2      { get; set; }
}