Отображение составных объектов в представлении с помощью докладчика

#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,...}; Это всегда плохо?