2012-01-25 7 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メソッドが含まれています。ここで

このクラスUploadFileViaFTP生活をしている今、私の質問は、コード

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)); 
     } 
    } 
} 

です。サービス層またはビジネス層では?そしてなぜそれが説明できますか?

詳細をご説明ください。

答えて

3

ファサードlearn more here)のようです。これはビジネス層です。結局のところ

UploadFilesViaFTPは、サービス操作または単一層アプリケーション(ビジネス層で生活のために良い指標)で利用可能であるべきです。

0

これは、アプリケーションの範囲内で "ビジネスロジック"をどのように定義するかによって異なります。 私が読んだところでは、アプリケーションの「ビジネス」はデータを変換してアップロードし、それ以外の方法では操作しないことがわかりました。だから私は、あなたのアプリに不可欠なビジネスロジックであるUploadFileViaFTPクラスが含まれており、ビジネスレイヤーになければならないと言います。

関連する問題