#c# #.net #winforms #mvp #composition
#c# #.net #winforms #mvp #композиция
Вопрос:
У меня есть триада MVP WageInfo
: Модель, WageView
Представление и WagePresenter
Ведущий. WageInfo
вызываются составные списки объектов List<Earning> EarningList
, List<Deduction> DeductionList
и List<WageBalance> WageBalanceList
.
Мой докладчик хочет показать доходы, вычеты и баланс заработной платы в трех отдельных DataGridViews
разделах представления. Итак, ведущий запрашивает WageInfo
, а затем WageInfo
получает данные DataService
и создает все три списка, и он вернет WageInfo
ведущему экземпляр, содержащий все списки объектов, после чего ведущий выбирает, что показывать в представлении следующим образом.
class WagePresenter
{
var wageInfo = WageInfo.GetEarnings(); // return a WageInfo instance
_View.Earnings = wageInfo.EarningList; // choose EarningList to show on the view
}
class WageInfo
{
public List<Earning> EarningList; // composition of EarningList in WageInfo
// Other lists
public WageInfo()
{
EarningList = new List<Earning>();
// Instantiate other lists
}
public WageInfo GetEarnings()
{
this.EarningList = CreateEarningList();
return this; // return current instance of WageInfo
}
private List<Earning> CreateEarningList()
{
var dataTable = _DataService.GenerateEarnings(); // DataService returns a DataTable
return ConvertDataTableToList(dataTable);
}
private List<Earning> ConvertDataTableToList(DataTable dt)
{
//Use data in the dt to create a list of Earning objects
return list;
}
}
Я просто хочу знать, нарушил ли я композицию здесь, объявив EarningList
и т.д. общедоступный?
Если я объявлю EarningList
private, у меня может быть открытый метод, в WageInfo
котором возвращается a EarningList
. Является ли это лучшим способом сделать, чем объявить EarningList
публично?
Если оба параметра не в порядке, то как мой докладчик отображает каждый список отдельно DataGridViews
?
РЕДАКТИРОВАТЬ : Заработок в классе выглядит следующим образом…
class Earning
{
public EmployeeID {get; set;}
public BasicSalary {get; set;}
public OverTime {get; set;}
public Allowance {get; set;}
}
Комментарии:
1. ИМХО, это нормально, но я бы оставил
get public
иset private
2. Также методы являются лучшим выбором, особенно если у вас есть сценарии, такие как оценка на основе условий или отложенная загрузка и т.д., В противном случае ваш подход должен быть достаточно хорошим.
3. @AD.Net , я использую public
Set
здесь, поскольку в настоящее время я создаю экземпляры подобных объектов без использования конструктора>new Earning { EmployeeID = emp_id, BasicSalary = basic_salary,...};
Это всегда плохо?