Wednesday, March 28, 2012

Object Oriented Programming in C#

I am going to explain the OO concept here. i will demo the code on how to apply the OO concept in C# to reduce the coding in the provider component.

First we need to define the interface. 
the following code snippet will be define the base interface. T will represent the
generic object. we will specific the object when we implement the provider for
those specfic object.

 public interface IBaseInterface<T>
 {
        T ReadData(string spName, string itemID);
        IEnumerable<T> ReadList(string spName);
        int Delete(string spName, string itemID);
 }
 
second we will a provider class that will implement the interface.
 
public class ProcessProvider<T> :IBaseInterface<T> where T:new()
    {
        public T ReadData(string spName, string itemID)
        {
            MyDB myDBAccess = new MyDB ();
            T tObj = new T();
            using (SqlDataReader tempDataReader = myDBAccess.LoadDataItem(spName,itemID))
            {
                if (tempDataReader != null && tempDataReader.HasRows)
                {
                    tempDataReader.Read();
 
                    for (int i = 0; i < tempDataReader.FieldCount; i++)
                    {
                        if (tempDataReader.GetValue(i) != DBNull.Value)
                        {
                            SciUtil.DataMapper.SetPropertyValue(tObj, 
tempDataReader.GetName(i), 
t                                 empDataReader.GetValue(i));
                        }
                    }
                    tempDataReader.Close();
                }
            }
            return tObj;
        }
 
 
        public IEnumerable<T> ReadList(string spName)
        {
 
            MyDB LeaseRetensionDBAccess = new MyDB();
            List<T> tObjectList = new List<T>();
            using (SqlDataReader tempDataReader = myDBAccess.LoadDataTable(spName))
            {
                if (tempDataReader != null && tempDataReader.HasRows)
                {
                    while (tempDataReader.Read())
                    {
                        T tObject = new T();
                        for (int i = 0; i < tempDataReader.FieldCount; i++)
                        {
                            if (tempDataReader.GetValue(i) != DBNull.Value)
                            {
                                SciUtil.DataMapper.SetPropertyValue(tObject, 
tempDataReader.GetName(i), tempDataReader.GetValue(i));
                            }
                        }
                        tObjectList.Add(tObject);
                    }
                    tempDataReader.Close();
                }
            }
            return tObjectList;
        }
 
        public int Delete(string spName, string itemID)
        {
            MyDB myDBAccess = new MyDB ();
            return myDBAccess.DeleteDataItem(spName, itemID);
        }
    }
} 

Third we can implement each specific provider after you finished implemented
the generic object provider.
 
when we inherit the generic provider, we need to replace the Generic T with
the specifc MyObject. then the code will determine the Object at run time.
 
 public class MyObjectProcessProvider:ProcessProvider<MyObject>
    {
        public MyObject GetCRMPortfolioData(string myObjectID)
        {
            return base.ReadData("My Stored Procedure", CRMPortfolioID);
        }
 
        public IEnumerable<MyObject> GetCRMPortfolioDataList()
        {
            return base.ReadList("My Stored Procedure");
        }
    }
 
when we have a new entity. we only need to add the new object to the entity
component. then we only need to add a provider with above coding and replace
MyObject with new object. the Provider is ready to use.

 

No comments:

Post a Comment