C# 我将如何使用这个工厂类,这有什么意义?

C# 我将如何使用这个工厂类,这有什么意义?,c#,class,methods,factory,factory-pattern,C#,Class,Methods,Factory,Factory Pattern,这是我第一次向SO发帖,我对C#非常陌生,因为我在数据库方面有很多IT经验。我开始研究我们的一些代码,并希望了解如何使用此类和it方法实现可恢复性 public class FileCreator { public string Territory { get; set; } public string CV { get; set; } public string AdDate { get; set; } public string Category { get;

这是我第一次向SO发帖,我对C#非常陌生,因为我在数据库方面有很多IT经验。我开始研究我们的一些代码,并希望了解如何使用此类和it方法实现可恢复性

public class FileCreator
{
    public string Territory { get; set; }
    public string CV { get; set; }
    public string AdDate { get; set; }
    public string Category { get; set; }
    public string Advertiser { get; set; }
    public string Brand { get; set; }
    public decimal SumOfSpend { get; set; }
    public decimal SumOfVolume { get; set; }
    public string Spots { get; set; }
    public string PageNumber { get; set; }

    internal static List<FileCreator> Create(DataSet data)
    {
        var result = new List<FileCreator>();

        if (data.Tables.Count > 0)
        {
            result = Create(data.Tables[0]);
        }

        return result;
    }

    public static List<FileCreator> Create(DataTable dataTable)
    {
        var result = new List<FileCreator>();

        foreach (DataRow row in dataTable.Rows)
        {
            result.Add(Create(row));
        }

        return result;
    }

    private static FileCreator Create(DataRow row)
    {
        var fileCreator = new FileCreator();

        fileCreator.Territory = (row["Territory"].ToString());
        fileCreator.CV = row["CV"].ToString();
        fileCreator.AdDate = row["Ad_date"].ToString();
        fileCreator.Category = row["Category"].ToString();
        fileCreator.Advertiser = row["Advertiser"].ToString();
        fileCreator.Brand = row["Brand"].ToString();
        fileCreator.SumOfSpend = Convert.ToDecimal(row["SumOfSpend"].ToString());
        fileCreator.SumOfVolume = Convert.ToDecimal(row["SumOfVolume"].ToString());
        fileCreator.Spots = row["Spots"].ToString();
        fileCreator.PageNumber = row["Page Number"].ToString();

        return fileCreator;
    }
}
公共类FileCreator
{
公共字符串区域{get;set;}
公共字符串CV{get;set;}
公共字符串地址{get;set;}
公共字符串类别{get;set;}
公共字符串广告商{get;set;}
公共字符串品牌{get;set;}
公共十进制SumOfSpend{get;set;}
公共十进制卷{get;set;}
公共字符串点{get;set;}
公共字符串页码{get;set;}
内部静态列表创建(数据集数据)
{
var result=新列表();
如果(data.Tables.Count>0)
{
结果=创建(数据表[0]);
}
返回结果;
}
公共静态列表创建(DataTable DataTable)
{
var result=新列表();
foreach(dataTable.Rows中的DataRow行)
{
结果.添加(创建(行));
}
返回结果;
}
专用静态FileCreator创建(数据行)
{
var fileCreator=新fileCreator();
fileCreator.Territory=(行[“Territory”].ToString());
fileCreator.CV=row[“CV”].ToString();
fileCreator.AdDate=行[“Ad_date”].ToString();
fileCreator.Category=行[“Category”].ToString();
fileCreator.Advertiser=row[“Advertiser”].ToString();
fileCreator.Brand=row[“Brand”].ToString();
fileCreator.SumOfSpend=Convert.ToDecimal(行[“SumOfSpend”].ToString());
fileCreator.SumOfVolume=Convert.ToDecimal(行[“SumOfVolume”].ToString());
fileCreator.Spots=row[“Spots”].ToString();
fileCreator.PageNumber=行[“页码”].ToString();
返回文件创建者;
}
}
为什么不创建一个datatable的新实例,即var dt=new datatable()

我肯定没有抓住这个方法的要点。当我通常只创建多个数据表时,如何从这种方法中获益


放松点。这是我的第一篇文章,重点是获取一个强类型类,而不是依赖硬编码字符串来获取数据,然后将所有内容转换为您期望的类型。相反,它从Datatable中获取数据并将其转换为“Dto”(数据传输对象),在该对象中,您知道存在的所有属性(列)及其类型,因为它们是显式声明的。没有猜测!:)


虽然这里给出的方法是有效的,但我希望它更符合传统。直接创建这个Dto类比创建Datatable然后映射它更有效。

不要认为这里有任何工厂模式。这段代码所做的一切都是。使用ADO.NET-获取数据集/数据表中的记录。这些记录与实体FileCreator匹配,因此这段代码帮助您将一组db记录(datatable)转换为一组(List)对象。嘿,欢迎使用StackOverflow:)将此问题标记为factory和factory模式的原因是什么?正如@pratekshrivastava所写的,这个类没有实现工厂模式。FileCreator的目的是封装用于创建FileCreator对象的逻辑,并将其与执行对数据库的实际调用的逻辑分离。因此,通过这个实现,您可以实现两件事-封装和分离关注点。这个实现的问题是,您正在接受一个具体的类型-
DataTable DataTable
,它将您与
ADO.NET
紧密结合,如果您决定改变从数据库检索数据的方式(例如,切换到实体框架)然后所有这些方法都必须更改,但我以前见过这种方法,主要是在旧项目中,在这些项目中,ORM并没有广泛传播。这不适合堆栈溢出、应用程序设计和解释。这种模式类型的问题是自以为是的,远不是具体的