W warstwie logiki biznesowej mam obiekt reprezentujący wykres słupkowy BarChart
. Składa się on m.in. z listy słupków (DataPoint
). Użytkownikowi chcę wyświetlić następujące dane na temat słupka: nazwę, wartość (de facto obiekt graficzny) i tooltip (zawierający info o nazwie, wartości i ilości). Zastanawiam się, czy obiekt DataPoint
powinien mieć właściwości Name
, Value
, Quantity
, a w ViewModelu "składać" Tooltip
, czy może w DataPoint
mieć już Tooltip
, tam go "poskładać", i wtety w ViewModelu tylko Tooltip = dataPoint.Tooltip
. Wtedy też już Quantity
nie byłoby potrzebne. Poniżej przykłady. Który jest poprawny od strony dobrych praktyk, clean code itd?
#1
public class BarChart
{
public List<DataPoint> DataPoints { get; set; } = new List<DataPoint>();
public class DataPoint
{
public DataPoint(SomeData someData)
{
Name = someData.Name;
Value = someData.Value;
Quantity= someData.Quantity;
}
public string Name { get; set; }
public decimal Value { get; set; }
public int Quantity { get; set; }
}
}
public class BarChartViewModel
{
public BarChartViewModel(BarChart barChart)
{
Labels = barChart.DataPoints.Select(x => x.Label).ToList();
Values = barChart.DataPoints.Select(x => x.Value).ToList();
Tooltips = barChart.DataPoints.Select(x => $"{x.Name} {x.Value}zł ({x.Quantity} szt.)").ToList();
}
public List<string> Names { get; set; }
public List<decimal> Values { get; set; }
public List<string> Tooltips { get; set; }
}
#2
public class BarChart
{
public List<DataPoint> DataPoints { get; set; } = new List<DataPoint>();
public class DataPoint
{
public DataPoint(SomeData someData)
{
Name = someData.Name;
Value = someData.Value;
Tooltip = $"{someData.Name} {someData.Value}zł ({someData.Quantity} szt.)"
}
public string Name { get; set; }
public decimal Value { get; set; }
public string Tooltip { get; set; }
}
}
public class BarChartViewModel
{
public BarChartViewModel(BarChart barChart)
{
Labels = barChart.DataPoints.Select(x => x.Label).ToList();
Values = barChart.DataPoints.Select(x => x.Value).ToList();
Tooltips = barChart.DataPoints.Select(x => x.Tooltip).ToList();
}
public List<string> Names { get; set; }
public List<decimal> Values { get; set; }
public List<string> Tooltips { get; set; }
}