Судя по комментариям, вы указываете, что ваша модель должна иметь (как минимум) 6 элементов в своем списке.Если это так, то эта логика принадлежит модели.Возможно, что-то вроде этого:
public class Order
{
public int OrderId { get; set; }
public string Customer { get; set; }
private List<OrderItem> _orderItems;
public List<OrderItem> OrderItems
{
get { return _orderItems; }
set
{
_orderItems = value;
if (_orderItems == null)
_orderItems = new List<OrderItem>();
while (_orderItems.Count < 6)
_orderItems.Add(new OrderItem());
}
}
public Order()
{
// invoke the setter logic on object creation
this.OrderItems = null;
}
}
Есть, конечно, множество способов организовать логику, это только один пример.Но дело в том, что если модель должна иметь хотя бы 6 элементов в своем списке, то модель - это то место, где вы бы это гарантировали.(В качестве альтернативы, если вы чувствуете, что в вашем домене должно быть представление , где эта логика гарантирована, и модель может иметь другие длины списка в других местах, которые она использует, тогда, я думаю, вы могли бы включить ту же логику впредставление. Но это кажется маловероятным. Логика, как правило, принадлежит моделям, представления должны просто связываться с этими моделями.)
Есть ли способ преодолеть эту ошибку без необходимости вручную заполнять коллекцию OrderItems длясоответствовать длине цикла?
Нет.Ну, в зависимости от того, как вы определяете «вручную».Вам нужно написать код где-нибудь для выполнения вашей пользовательской логики?Да.Вам нужно повторять один и тот же код везде, где вы его используете?Нет, поэтому он относится к модели.
Или, иначе говоря: «Умные структуры данных и тупой код работают намного лучше, чем наоборот».-Эрик Рэймонд