2012-01-25 122 views
1

我必须创建一个将业务数据上传到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生活。在服务层还是业务层?请解释这是为什么?

我希望详细解释一下。

回答

3

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

毕竟,UploadFilesViaFTP应该在服务操作或单个层应用程序(一个很好的迹象为生活在业务层)可用。

0

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