I am trying to implement design pattern in my project and have been reading material over net.
we have a sales application ( in C# ) where in we are storing entities like
Customer
Contacts
Sales Order
Lead
Opportunity
This is how i am planning to implement design pattern.
Entity
would be the base class and it has common variables
namespace DesignModel.Model
{
class Entity
{
protected IDBOperation dbOperation;
public string id { get; set; }
public int isSync { get; set; }
public string timestamp { get; set; }
public void insert()
{
dbOperation.insertData();
}
public void update()
{
dbOperation.updateData();
}
public void delete()
{
dbOperation.deleteData();
}
}
}
Here is the Contact
class that is extending Entity
class. Contact
class would have its own properties too.
namespace DesignModel.Model
{
class Contact : Entity
{
public Contact()
{
dbOperation = new DBOperations();
}
public string name { get; set; }
public string company { get; set; }
public string jobtitle { get; set; }
}
}
Now what i have derived from the nature of this application is each entity has following operations for database interaction and to fetch data from server.
for database operation
insert
update
delete
to get and send data from server
getData
sendData
based on that i have created an interface named IDBOperation
namespace DesignModel.Database
{
interface IDBOperation<T>
{
void insertData(T entity) ;
void updateData(T entity);
void deleteData(T entity);
void displayData();
}
}
and concrete class DBOperations that implements IDBOperation
namespace DesignModel.Database
{
class DBOperations : IDBOperation<Entity>
{
public void insertData(Entity e) {
Debug.WriteLine("insertData "+e.id );
}
public void deleteData(Entity e)
{
Debug.WriteLine("deleteData" + e.id);
}
public void updateData(Entity e)
{
Debug.WriteLine("updateData" + e.id);
}
public void displayData()
{
}
}
and at last Contact
class
namespace DesignModel.Model
{
class Contact : Entity
{
public Contact()
{
dbOperation = new DBOperations();
}
public string name { get; set; }
public string company { get; set; }
public string jobtitle { get; set; }
}
}
i am using contact as follows
Contact contactData = new Contact();
contactData.id = "1234";
contactData.isSync = 1;
contactData.jobtitle = "Sales Manger";
contactData.insert(contactData);
I am little confused where i have been implementing it correctly or not.
the reason why i kept implementation in DBOperation
because if new interface method comes i have to implement it at one place oppose to if i am implementing method in customer, contact and sales order classes.
one thing that worries me is Entity
parameter in insertData
inside DBOperation
not sure whether i will be able to add entire contact into db or not.
so if anyone help me in providing pointers to correctly implement the design pattern in this use case then it will me more helpful