Я играю с правилами Object Calisthenics, и у меня возникают некоторые трудности с выбором, когда использовать коллекции первого класса при использовании C #.
Я имею в виду, что едва вижу, когда он должен использоваться, напримербыло бы трудно применить это правило к EF DbContext
.
Допустим, мы проектируем класс Board.
public class Board
{
public IList<BoardRow> Rows { get; }
public IList<BoardColumn> Columns { get; }
public Board()
{
Rows = new List<BoardRow>();
Columns = new List<BoardColumn>();
}
}
Так что в соответствии с этим правилом нам нужно повернутьприведенный выше код в:
// Is it really that better than just using List<BoardRow>?
public class BoardRowCollection : IEnumerable<BoardRow>
{
public void Add(BoardRow row) { /*...*/ }
public void Remove(BoardRow row) { /*...*/ }
// IEnumerable<BoardRow> Impl goes here...
}
// Is it really that better than just using List<BoardColumn>?
public class BoardColumnCollection : IEnumerable<BoardColumn>
{
public void Add(BoardColumn column) { /*...*/ }
public void Remove(BoardColumn column) { /*...*/ }
// IEnumerable<BoardRow> Impl goes here...
}
public class Board
{
public BoardRowCollection Rows { get; }
public BoardColumnCollection Column { get; }
// Rest of the impl, ctor, etc.
}
Я не совсем понимаю смысл этого правила, когда у вас уже есть базовые классы, которые можно использовать для достижения ваших целей.
Может быть, кодвыше, не самый лучший, но я хотел бы увидеть один пример, который может пролить свет на цель этого правила.