CSLA オブジェクト内でデータ ポータル メソッドを実行する場合、それらのデータ ポータル メソッドのコンテンツはデータ サービスを呼び出して、そのデータを取得および更新する必要があります。これらの Web サービスは、モックアウトできるようにインターフェイス ベースにする必要があります。
従業員オブジェクトを設定する例を次に示します。
private void DataPortal_Fetch(SingleCriteria<Employee, int> criteria)
{
IEmployeeDTO data = DataServiceContext.Current.EmployeeDataService.GetEmployee(criteria.Value);
// Just do left to right copying here
LoadProperty<int>(IdProperty, data.Id);
}
次に、EmployeeDataService は単なるインターフェイスです。Ninject を使用して、使用するデータ アクセス テクノロジの別のアセンブリを指すインターフェイスの concreate クラスを作成します。その後、テスト クラスに別の具象クラスを指定できます。
データ サービス インターフェイスの例を次に示します。
public interface IEmployeeDataService
{
IEmployeeDTO GetEmployee(int id);
}
Linq 2 SQL を使用するためのデータ サービス concreate クラスの例を次に示します。
namespace XXX.DataServices.Linq
{
public class EmployeeDataService : IEmployeeDataService
{
public IEmployeeDTO GetEmployee(int id)
{
// use Linq to SQL to get the data and transform that class into IEmployeeDTO
}
}
}
テストに使用するデータ サービスの例を次に示します。
namespace XXX.DataServices.Testing
{
public class IEmployeeDTO GetEmployee(int id)
{
// mock up several IEmployeeDTO objects with known data
}
}