Как бы я использовал этот класс Factory и какой в ​​этом смысл? - PullRequest
0 голосов
/ 19 февраля 2020

Это моя первая публикация в SO, и я очень новичок в C# с большинством моего опыта работы с ИТ в базах данных. Я начинаю смотреть на некоторый наш код и хотел бы понять, как я буду использовать этот класс и его методы для целей повторного использования.

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

Почему бы просто не создать новый экземпляр таблицы данных, то есть var dt = new Datatable ()?

Я, должно быть, упускаю суть этого подхода. Какую пользу я получу от этого подхода, когда я обычно просто создаю несколько таблиц данных?

Go просто. Это мой первый пост ?

Спасибо

1 Ответ

0 голосов
/ 19 февраля 2020

Смысл этого в том, чтобы получить строго типизированный класс вместо того, чтобы полагаться на жестко запрограммированные строки для вывода данных, а затем приводить все к ожидаемому типу. Вместо этого он берет данные из Datatable и преобразует их в «Dto» (объект передачи данных), где вы знаете все существующие свойства (столбцы) и их типы, потому что они явно объявлены. Там нет угадать! :)

Хотя данный подход здесь работает, я надеюсь, что это больше для наследия. Более эффективно просто создать этот класс Dto напрямую, а не создавать Datatable и затем отображать его.

...