【问题标题】:Is this a DTO or a POCO or a combination of the two C#这是 DTO 还是 POCO 还是这两个 C# 的组合
【发布时间】:2015-04-21 11:13:25
【问题描述】:

所以下面我创建了一个类作为我所看到的示例,实际上我自己甚至开始使用这种模式,因为它对我来说非常有用。问题是我一直称它为 POCO,但我相信 POCO 确实不应该包含实际的数据访问。我相信对于 DTO 来说更是如此。那么这里的问题是这个DTO,POCO,是两者的结合还是两者都不是?

namespace MAINAPP.DAL
{

    public class SomeModel
    {
        public int SomeModelID { get; set; }
        public String Name { get; set; }

        public static bool DeleteSomeModel(int SomeModelID)
        {
            bool returnstatus = true;
            int statusint = 0;
            try
            {
                using (SqlConnection sc = new SqlConnection(ConfigurationManager.ConnectionStrings["SomeDBString"].ConnectionString))
                {
                    sc.Open();
                    StringBuilder query = new StringBuilder();
                    query.Append("DELETE  FROM SomeModels WHERE SomeModelID = @SomeModelID");

                    using (SqlCommand comm = new SqlCommand(query.ToString(), sc))
                    {
                        comm.Parameters.Add(new SqlParameter("@SomeModelID", SomeModelID));
                        statusint = comm.ExecuteNonQuery();


                        comm.Dispose();
                    }
                    sc.Close();
                    sc.Dispose();
                }

            }
            catch (SqlException se)
            {
                var exceptionresult = se.Message;

            }
            if (statusint > 0)
            {
                returnstatus = true;
            }
            else
            {

                returnstatus = false;
            }
            return returnstatus;
        }

    }
}

【问题讨论】:

标签: c# poco dto


【解决方案1】:

这既不是 POCO,也不是 DTO。

POCO 是一个普通的旧 CLR 对象,这意味着它没有依赖项,也没有基类派生。您呈现的对象依赖于 System.Data。

传统上,DTO 仅用作数据合同。 DTO 意味着它真的不应该有行为,因为该行为不可序列化。如果有人要使用 WSDL 定义中的对象并且没有您的类表示,则他们无法重现 DeleteSomeModel 方法。

如果您想要 POCO 类,我建议您使用存储库模式进行数据访问,或者在 Entity Framework 中使用 Code First 之类的东西。

这是一个使用存储库模式的示例

public class SomeModel
{
    public int SomeModelID { get; set; }
    public String Name { get; set; }
}

public class SomeModelRepository
{
    public void Delete(int id)
    {
       // delete logic here
    }
}

【讨论】:

  • LOL 所以是的,我喜欢我说过我在这里和那里经常看到这种风格。老实说,它似乎工作得很好,我只是不知道到底该怎么称呼它。你觉得这种风格有什么问题吗?
  • 存储库模式没有任何问题,它往往工作得很好。我唯一要注意的是确保不要将业务逻辑泄漏到您的存储库中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多