业务层服务层中的程序逻辑

时间:2012-01-25 15:46:54

标签: c# dependency-injection

我必须创建一个将业务数据上传到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 个答案:

答案 0 :(得分:3)

看起来它更像是一个façadelearn more here)。这是业务层。

毕竟, UploadFilesViaFTP 应该可以在服务操作或单层应用程序中使用(生活在业务层中的良好指示)。

答案 1 :(得分:0)

这取决于您在应用程序范围内定义“业务逻辑”的方式。 根据我的阅读,我看到您的应用程序的“业务”是转换和上传数据,而不是以任何其他方式操作它。所以我想说UploadFileViaFTP类包含你的应用程序的基本业务逻辑,应该在业务层。