这是 DTO 还是 POCO 还是两者的组合 C#

Is this a DTO or a POCO or a combination of the two C#

所以下面我有一个 class 我创建的例子,作为我一直看到的例子,实际上我什至自己开始使用这个模式,因为它对我来说非常有用。问题是我一直称它为 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;
        }

    }
}

这不是 POCO 也不是 DTO。

POCO 是一个普通的旧 CLR 对象,这意味着它没有依赖关系,也没有基础 class 派生。您提供的对象依赖于 System.Data.

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

如果您想要 POCO classes,我建议您使用 Repository 模式进行数据访问,或者使用 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
    }
}