Как научиться создавать хорошие классы? Я, как и все начинающие попытался пойти от простого к сложному. От создания консольного приложения выводящего какие то данные на экран, к классу который бы выдавал эти данные в удобной форме и при этом выставлял бы наружу только нужный пользователю метод.
Мое консольное приложение, которое парсит xml файл с смс сообщениями от банка и выводит на экран остаток средств на определенную дату выглядит вот так:XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load("sms.xml");
XmlElement xRoot = XmlDoc.DocumentElement;
foreach (XmlNode xNode in xRoot)
{
if (xNode.Attributes.Count > 0)
{
XmlNode attr = xNode.Attributes.GetNamedItem("address");
if (attr.Value == "bank")
{
// Методы GetDateFromDateField и GetBalanceFromBodyField, с помощью регулярных
// выражений парсят исходные данные.
Console.Write(GetDateFromDateField(xNode.Attributes.GetNamedItem("date").Value) + " ");
Console.WriteLine(GetBalanceFromBodyField(xNode.Attributes.GetNamedItem("body").Value));
}
}
}
Хотелось бы, чтобы класс на выходе предоставлял не изменяемую коллекцию. Помогите, пожалуйста, определить интерфейс такого класса.
Конечно интересен сам принцип создания классов, т.е. пошаговый ход мыслей. Если поделитесь ссылкой на материал описывающий такой подход буду очень благодарен.

21 Авг 2019 в 07:05
170 +1
0
Ответы
1

Для того чтобы создать класс, который будет обрабатывать XML файл с SMS сообщениями от банка и предоставлять данные в удобной форме пользователю, вам следует следовать принципам SOLID и использовать принципы ООП.
В данном случае, можно создать интерфейс, который будет определять методы для получения данных из XML файла и возвращать их в удобной форме. Примерно так:

public interface IBankSmsParser
{
IReadOnlyCollection<BankSmsData> ParseSmsData(string xmlFilePath);
}
public class BankSmsParser : IBankSmsParser
{
public IReadOnlyCollection<BankSmsData> ParseSmsData(string xmlFilePath)
{
List<BankSmsData> smsDataList = new List<BankSmsData>();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlFilePath);
foreach (XmlNode smsNode in xmlDoc.DocumentElement)
{
if (smsNode.Attributes.Count > 0)
{
XmlNode addressAttr = smsNode.Attributes.GetNamedItem("address");
if (addressAttr.Value == "bank")
{
string date = GetDateFromDateField(smsNode.Attributes.GetNamedItem("date").Value);
string balance = GetBalanceFromBodyField(smsNode.Attributes.GetNamedItem("body").Value);
smsDataList.Add(new BankSmsData(date, balance));
}
}
}
return smsDataList.AsReadOnly();
}
private string GetDateFromDateField(string dateValue)
{
// Ваш код для парсинга даты
}
private string GetBalanceFromBodyField(string bodyValue)
{
// Ваш код для парсинга баланса
}
}
public class BankSmsData
{
public string Date { get; }
public string Balance { get; }
public BankSmsData(string date, string balance)
{
Date = date;
Balance = balance;
}
}

Таким образом, вы создали интерфейс IBankSmsParser, который определяет метод для парсинга данных и возвращения их в виде коллекции объектов BankSmsData. Класс BankSmsParser реализует этот интерфейс и содержит логику по парсингу XML файла и созданию объектов BankSmsData. Класс BankSmsData представляет собой объект, который содержит дату и баланс из SMS сообщения.

Материалы по созданию классов и принципам ООП вы можете найти на различных онлайн-курсах по C# или в книгах по программированию на C#. Например, книги "Язык программирования C# 8 и платформа .NET Core 3.0" Джеффри Рихтера и "Программирование на C#. Теория и практика" Эндрю Троелсена.

28 Мая 2024 в 16:04
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 005 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир