Реализация нескольких экранов в Приложении

Grady Booch в "Объектно-ориентированном анализе и проектировании":

"Идея сцепления также прибывает из структурного проектирования. Просто указанный, сцепление измеряет степень возможности соединения среди элементов единственного модуля (и для объектно-ориентированного дизайна, единого класса или объекта). Наименее желательная форма сцепления является случайным сцеплением, в которое совершенно несвязанные абстракции брошены в тот же класс или модуль. Например, рассмотрите класс, включающий абстракции собак и космического корабля, поведения которого довольно не связаны. Самая желательная форма сцепления является функциональным сцеплением, в котором элементы класса или модуля все сотрудничают для обеспечения некоторого хорошо ограниченного поведения. Таким образом класс Собака функционально связен если ее объятие семантики поведение собаки, целой собаки, и только собаки".

Собака Subsitute с Клиентом в вышеупомянутом и это могло бы быть немного более ясно. Таким образом, цель состоит в том, чтобы действительно только стремиться к функциональному сцеплению и переезжать от случайного сцепления как можно больше. В зависимости от Ваших абстракций это может быть просто или могло потребовать некоторого рефакторинга.

сцепление Примечания применяется так же к "модулю", чем к единому классу, т.е. группе сотрудничества классов. Таким образом, в этом случае классы Клиента и Порядка все еще имеют достойное сцепление, потому что у них есть этот сильный relationshhip, клиенты создают заказы, заказы принадлежат клиентам.

Martin Fowler говорит, что был бы более удобным вызовом его "Предложение Demeter" (см., что Насмешки статьи не являются тупиками ):

"тестеры Mockist действительно говорят больше о предотвращении 'железнодорожных аварий' - цепочки метода стиля getThis () .getThat () .getTheOther (). Предотвращение цепочек метода также известно как в соответствии с Законом Demeter. В то время как цепочки метода являются запахом, противоположной проблемой средних объектов мужчин, чрезмерно увеличенных в размере с передачей методов, является также запах. (Я всегда чувствовал, что был бы более доволен Законом Demeter, если бы это назвали Предложение Demeter.)"

, Который подводит итог приятно, куда я происхожу из: это совершенно приемлемо и часто необходимо иметь более низкий уровень сцепления, чем строгое соблюдение "закона" могло бы потребовать. Избегайте случайного сцепления и стремитесь к функциональному сцеплению, но не становитесь одержимыми тонкой настройкой при необходимости для согласований более естественно с абстракцией дизайна.

6
задан Michael Stum 20 October 2009 в 19:00
поделиться

3 ответа

Один из подходов - реализовать каждый экран как пользовательский элемент управления и динамически загружать и выгружать эти элементы управления в главном окне по мере необходимости. Я использовал этот подход в мобильном приложении для Windows, и он неплохо сработал.

7
ответ дан 9 December 2019 в 20:45
поделиться

Considering you mentioned WPF, it's worth mentioning that Prism (the composite UI framework from MPP) would implement that using multiple Views (UserControls) either within a single Controller (for the same general aggregate) or multiple Controllers (across several aggregates).

Either the view or its presenter can trigger a command (or broadcast an event via IEventAggregator) and your navigation controller can respond by changing the current view assigned to the appropriate "region" (you might only have one). In fact, Prism's region model is quite similar to the MasterPage/Placeholder model, so you might want to look into that.

Prism might also include navigation history (back/forward) tracking, but I've not used it if it does.

3
ответ дан 9 December 2019 в 20:45
поделиться

Я не слышал о конкретной структуре для этого, но я бы сделал каждую страницу UserControl или, возможно, подклассом элемента управления с желаемой логикой рендеринга. Все эти элементы управления страницы будут членами формы и добавлены в ее коллекцию Controls по мере необходимости (или, если их слишком много, созданы по мере необходимости). У них будут свойства типа Dock = DockStyle.Fill , установленные при инициализации. При смене страниц:

void ChangePage(object sender, EventArgs e)
{
   Controls.Clear();
   Controls.Add(sender as Control);
}
1
ответ дан 9 December 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: