【问题标题】:DTO POCO conversionDTO POCO 转换
【发布时间】:2012-04-10 02:59:20
【问题描述】:

我有几个 DTO 和相应的 POCO。

它们之间推荐的转换方式是什么以及转换函数的位置。

我最初的想法是在 POCO 中放两个转换函数,分别命名为 ToPOCO 和 ToDTO。

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

谢谢, 想法。

【问题讨论】:

  • 有趣的是,你忽略了语言/平台。从你处理事情的方式我猜是 Java,但看到命名,我猜是 C#
  • 如果我错了,请纠正我,但 DTO 和 POCO 几乎不是同义词吗?
  • @doogle 据我了解,DTO 不具备功能。它们就是所谓的;数据传输对象。它们是可序列化的,因此可以通过 SOAP 服务进行传输。 POCO 是标准域实体,包含构造函数,更具体地说,是行为。这些对象不会序列化,因此在这种情况下对于“传输”是无用的。

标签: c# poco dto n-tier-architecture


【解决方案1】:

查看为您执行此操作的库:

我个人最喜欢的轻量级是使用隐式转换操作。我必须补充一点,我仅在未来重构后打算移除“胶水”层时才使用它。这在生产环境中可能不适合作为长期解决方案(因为隐含性很容易错过)。

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; }
}

【讨论】:

    猜你喜欢
    • 2010-11-15
    • 2011-04-02
    • 2012-06-22
    • 2010-09-30
    • 2019-09-02
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多