у меня есть класс Row
.Этот класс должен иметь свойство Content.В настоящее время содержимое имеет тип: List<IRowContent>
(IRowContent
- это интерфейс)
Другие классы Column
и TextContent
, ImageContent
реализуют интерфейс IRowContent
.
Теперь я могу добавить несколько столбцов в список или реальный «контент» (текст или изображение).
Но вы также можете добавить столбцы и текст / изображение.Но если строка содержит текст / изображение, она не должна содержать другой элемент.
Как мне спроектировать мою классовую структуру для поддержки этого?
Редактировать : некоторые дополнительные сведения: Я хочу создать макет с помощью « плавных интерфейсов » http://en.wikipedia.org/wiki/Fluent_interface
И моя идея состоит в том, чтобы предотвратить неправильное использование intellisense VisualStudio.
Вот мои классы:Макет имеет список столбцов.
class Layout
{
//Attributes
public Color Background { get; set; }
public List<Column> Columns { get; set; }
public uint Margin { get; set; }
public Layout AddColumn(Column c)
{
return null;
}
public Layout SetColumnList(List<Column> c)
{
return null;
}
}
Столбец содержит список содержимого (IColumnContent).Сам столбец из IRowContent.
class Column : IRowContent
{
public List<IColumnContent> Content { get; private set; }
public Column AddToContent(IColumnContent obj)
{
return null;
}
public Column SetContent(List<IColumnContent> objs)
{
return null;
}
}
То же самое для строки с IRowContent:
class Row : IColumnContent
{
public List<IRowContent> Content { get; private set; }
//...
}
ImageContent и TextContent реализуют оба интерфейса:
class TextContent : IRowContent, IColumnContent
class ImageContent : IRowContent, IColumnContent