0

ICountry という名前のインターフェイスを作成しました

public  interface ICountry
    {
        List<CountryProperty> GetAllCountry();
        List< CountryProperty> GetCountryById(int countryid);

    }

次に、CountryProvider という名前の抽象クラスを作成した後、このように ICountry インターフェイスのメソッドを実装しました。

public abstract   class CountryProvider:ICountry
  {

      public static CountryProvider Instance
      {
          get
          {
              return new Country();
          }
      }


      public abstract List<CountryProperty> GetAllCountry();


      public abstract List<CountryProperty> GetCountryById(int countryid);

    }

次に、Country という名前の単純なクラスを作成し、CountryProvider クラスを継承し、抽象メソッドをオーバーライドした後

public   class Country: CountryProvider 
  {
      private DbWrapper _objDataWrapper;
      private DataSet _dataSet;


      public override List<CountryProperty> GetAllCountry()
      {   _dataSet=new DataSet();
          _objDataWrapper = new DbWrapper(Common.CnnString, CommandType.StoredProcedure);
          var objCountryList = new List<CountryProperty>();
          try
          {
             _dataSet=_objDataWrapper.ExecuteDataSet("Aj_Proc_GetCountryList");
              objCountryList = BindCountryObject(_dataSet.Tables[0]);

          }
          catch (Exception ex)
          {

          }
          return objCountryList;
      }

      public override List<CountryProperty> GetCountryById(int countryid)
      {
          _dataSet = new DataSet();
          _objDataWrapper = new DbWrapper(Common.CnnString, CommandType.StoredProcedure);
          var objCountryList = new List<CountryProperty>();
          try
          {
              _objDataWrapper.AddParameter("@CountryId", countryid);
              _dataSet = _objDataWrapper.ExecuteDataSet("Aj_Proc_GetCountryList");
              objCountryList = BindCountryObject(_dataSet.Tables[0]);

          }
          catch (Exception ex)
          {
              var err = ex.Message;

          }
          return objCountryList;
      }

      private List <CountryProperty> BindCountryObject(DataTable dataTable )
      {
          if (dataTable == null) throw new ArgumentNullException("dataTable");
          var objCountryList = new List<CountryProperty>();


        try
          {
              if(dataTable.Rows.Count>0 )
              {

                  for(var j=0;j<dataTable.Rows.Count;j++)
                  {
                      var objCountry = new CountryProperty
                                           {
                                               CountryId = Convert.ToInt32(dataTable.Rows[j]["AjCountryId"]),
                                               CountryCode = Convert.ToString(dataTable.Rows[j]["AjCountryCode"]),
                                               CountryName = Convert.ToString(dataTable.Rows[j]["AjCountryName"])
                                           };
                      objCountryList.Add(objCountry);
                  }
              }
          }
          catch (Exception ex)
          {


          }
          return objCountryList;
      }
  }

次に、このようなメソッドを呼び出した後

   var data = CountryProvider.Instance.GetAllCountry();

私の質問は、フォローするかどうかはタイトなアプローチかということです

4

1 に答える 1

0

アプリケーション全体で単一のインスタンスが必要な場合は、シングルトンパターンを使用する必要があります-

private static Country country;
public static CountryProvider Instance
{
   get
   {
      if(country == null)
      {
         country = new Country();
      }
      return country;
   }
}

そして、あなたdon't need an abstract classはいつでもあなたが国の実体を返したいと思ったので。したがって、Countryクラスは、他の2つのメソッドが抽象的であり、Countryクラスでオーバーライドしているため、インターフェイスを直接実装する必要があります。

于 2012-10-27T13:31:17.730 に答える