0

私は一般的な共有ポイント DALL を構築しているので、ここで助けが必要です。これが当てはまるかどうかはわかりませんが、論理的には当てはまるはずです。

私の問題は、私の gr8 TTL が、使用する必要があるデータ ソース (SQL または SharePoint リスト) が不明であり、プロジェクトの開発を開始する必要があることです。

SPリストは私のデータソースであるため、DALを構築する必要があるため、将来の変更は最小限になります。

今私が持っているのは、delete、getAll などのすべての一般的な操作を含む baseDAL です。

myBase dal クラスは次のようになりました

public class BaseDAL<T> where T : BaseInfo,new()
{
    public virtual List<T> GetAllItem()
{
   //code to read from any data source and return data

}
public virtual Boolean Delete(T entity)
 {
    int entityID  = ((BaseInfo)entity).ID;
    deleteEntity(entityID);
 }

}

そして私は主要なビジネスオブジェクトエンティティとして baseInfo calss を持っています。

そして、2つのビジネスエンティティ(従業員、学生)と、従業員用と学生用の2つのDALがあるとしましょう

だから私が考えているのは、Tタイプに基づいてすべてのアイテムを返すgetAllItemのコードを実装しているので、コードはbaseDALで以下のようになるかもしれません

public virtual List<T> GetAllItem()
{

   SPListItemCollection items = //code to read from list please note that list name saved in baseInfo object
   T.getBusinessListItems(items); //toList

}

EmployeeDAL では、SPListItemCollection からビジネス エンティティへのマッパー関数を実装します。コードはこれに似ています。

public virtual List<Employee> getBusinessListItems(SPListItemCollection items)
{

  //loop the items and fill them in list of employee objects
  return list<Employee>

}

これがケースを明確にすることを願っています。これがそれを行うための書き込み方法であるかどうかはわかりません。私はかなり技術的な人ではありません。それを行う別の方法があれば、助けてください。

4

2 に答える 2

0

これがあなたが望むものかどうかはわかりませんが、役立つかもしれません:

object someDal = ...; //you don't know the exact type
var list = ((dynamic)someDal).GetAllItem();

C# dynamic は、この問題を既に解決しています。

于 2012-12-09T12:39:58.270 に答える
0

最終的に私はそれを行うことができました、、私は次のコードを使用したのと同じ構造で、私はそれがリフレクションと呼ばれると思います

public virtual List<T> GetAllItems(Type DalType)//this is baseDAL
{
  MethodInfo methodInfo = DalType.GetMethod("ConvertToBusinessEntities");
  object[] parametersArray = new object[] { itemCollection };
  object classInstance = Activator.CreateInstance(DalType, null);
  return (List<T>)methodInfo.Invoke(classInstance, parametersArray);
}

どのクラスからメソッドを呼び出すかを知るために DalType を渡すだけで済みます。すべての DAL が ConvertToBusinessEntities メソッドを実装していることを確認すれば、コードは機能します。これはインターフェイスで管理できます。このコードの構造が十分に強力であることを願っています...結局のところ、行き止まりではありませんでした:) ,,,

于 2012-12-10T11:11:48.730 に答える