Мне нужно создать программу, которая бы загружала бизнес-данные на FTP-сайт.Я разрабатываю эту программу на C #.
Поэтому я создал зависимые классы для этой программы следующим образом:
IData - для извлечения данных из базы данных
IDataTransform - для преобразования данных, полученных избаза данных в определенном формате по запросу клиента
IFtpOperation - загружает файл с локального диска
ISettings - содержит все соответствующие конфигурации, такие как строка подключения, местоположение сервера FTP, учетные данные и т. д.,
Вот его код:
public interface IFtpOperation
{
void Upload(string localFilePath);
}
public interface IDataTransform<in T1, out T2>
{
T2 Transform(T1 input);
}
public interface IData<in T1, out T2>
{
T2 GetData(T1 input);
}
public interface ISettings
{
T GetValue<T>(string key);
}
Затем я создал другой класс, который связывает эти операции.Вышеуказанные интерфейсы передаются в качестве параметра конструктора этому классу.Этот класс содержит метод UploadCustomerData, который при необходимости вызывает методы в зависимостях.
Вот код
public class UploadFileViaFTP
{
private readonly IFtpOperation _ftp;
private readonly IData<int, IList<CustomerData>> _customerData;
private readonly IDataTransform<CustomerData, string> _transformer;
private readonly ISettings _settings;
public UploadFileViaFTP(IFtpOperation ftp, IData<int, IList<CustomerData>> customerData,
IDataTransform<CustomerData, string> transformer, ISettings settings)
{
_ftp = ftp;
_transformer = transformer;
_customerData = customerData;
_settings = settings;
}
public void WriteToDisk(IList<CustomerData> customers, string localFilePath)
{
using (var writer = new StreamWriter(localFilePath))
{
foreach (var customer in customers)
{
writer.WriteLine(_transformer.Transform(customer));
}
}
}
private void UploadCustomerData(int accountId)
{
var customerData = _customerData.GetData(accountId);
if (customerData.Count > 0)
{
var localPath = _settings.GetValue<string>("LocalFilePath");
WriteToDisk(customerData, localPath);
_ftp.Upload(localPath);
}
else
{
_notificationMessage.AppendLine(
string.Format("There could be an error or no data avaiable to upload at {0} for account {1}.", DateTime.Now, accountId));
}
}
}
Теперь мой вопрос - где живет этот класс UploadFileViaFTP.На уровне услуг или бизнес-уровне?И, пожалуйста, объясните, почему это так?
Я надеюсь, что объяснил подробно.