Hello Guys,
Recently I came across a scenario where Single responsibility and Open close principle get violated in my c# code. below is the scenario :
I am having two classes :
1. Export Questionnaire - export questionnaire functionality
2. Export Initial Bid - export initial bid functionality
1. Export First
internal class ExportQuestionnaire
{
public int startRowPosition { get; set; }
public int startColumnPosition { get; set; }
public int endColumnPosition { get; set; }
public List<int> unSupportedQuestion { get; set; }
public ExportQuestionnaire(int _startRowPosition, int _startColumnPosition, int _endColumnPosition)
{
startRowPosition = _startRowPosition;
startColumnPosition = _startColumnPosition;
endColumnPosition = _endColumnPosition;
unSupportedQuestion = new List<int>() { 3, 4, 5, 10, 11, 15, 16 };
}
public DataRow ProcessRow(DataRow drif, Question question, int countQuestion, long eventCode)
{
}
public string GenerateSecureCode_Q(Question question)
{
}
public string GenerateSecureCode(List<FirstRowChoice> lstQuestionchoice)
{
}
public int GetFirstIdFromSheetColumn(string questionString)
{
}
public void ProcessDocument(Workbook templateWorkbook, ExcelHelper excelHelper, DataTable dt, SecureString _ExcelProtection)
{
}
public void ApplyStyle(Worksheet worksheet, int count)
{
}
}
2. Export Second
internal class ExportInitialBid
{
public int startRowPosition { get; set; }
public int startColumnPosition { get; set; }
public int endColumnPosition { get; set; }
public ExportInitialBid(int _startRowPosition, int _startColumnPosition, int _endColumnPosition)
{
startRowPosition = _startRowPosition;
startColumnPosition = _startColumnPosition;
endColumnPosition = _endColumnPosition;
}
public DataRow ProcessRow(DataRow drif, Second lib, List<Second> SecondList)
{
}
public void ProcessDocument(Workbook templateWorkbook, ExcelHelper excelHelper, DataTable dt, int Resolution, SecureString _ExcelProtection)
{
}
private void ApplyStyle(Worksheet worksheet, int rowCount, int columnCount)
{
}
private void ApplyDecimalStyle(Worksheet worksheet, int Count, int columnCount, int Resolution)
{
}
}
Now, I am trying to DRY it and creating separate classes for ApplyStyle, ApplyDecimalStyle, ProcessRow, ProcessDocument keeping one base abstract class for each of these.
in future if i need to require one more ExportSomething, I will create one new pair of ApplyStyle, ApplyDecimalStyle, ProcessRowand ProcessDocument , extending abstract class of past.
But in this way huge no. of classes get created. while previously only two classes i had.
Is this correct approach to separate each and everything in different classes in c# ?
you can ignore answering, if this long question is annoying. but if you do, i will learn something new.
Thanks
[UPDATE 1] : Rename classes and provided comments.