Программная логика на уровне обслуживания поверх бизнес-уровня - PullRequest
1 голос
/ 25 января 2012

Мне нужно создать программу, которая бы загружала бизнес-данные на 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.На уровне услуг или бизнес-уровне?И, пожалуйста, объясните, почему это так?

Я надеюсь, что объяснил подробно.

Ответы [ 2 ]

3 голосов
/ 25 января 2012

Похоже, это больше похоже на фасад ( узнайте больше здесь ).И это бизнес-уровень.

В конце концов, UploadFilesViaFTP должен быть доступен в сервисных операциях или в приложении одного уровня (хороший показатель для жизни на бизнес-уровне ).

0 голосов
/ 25 января 2012

Это зависит от того, как вы определяете «бизнес-логику» в области своего приложения. Из того, что я прочитал, я вижу, что «бизнес» вашего приложения состоит в том, чтобы преобразовывать и загружать данные, а не использовать их любым другим способом. Поэтому я бы сказал, что класс UploadFileViaFTP содержит основную бизнес-логику для вашего приложения и должен находиться на бизнес-уровне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...