Как правильно выбрать архитектурные / дизайнерские шаблоны - PullRequest
0 голосов
/ 23 октября 2018

Я занимаюсь собственным исследовательским проектом и очень стараюсь найти правильный выбор архитектурных / дизайнерских шаблонов.

В этом проекте после запуска «системы» мне нужно что-то делать в фоновом режиме (задачи, обработка, отображение данных и т. Д.) И в то же время иметь возможность взаимодействовать с системой, используя, например,, клавиатуру и отправьте несколько команд, таких как «дать мне статус этого конкретного объекта» или «каковы данные в этом объекте».

Поэтому мой вопрос - какие программные / архитектурные шаблоны могут быть применены к этомуконкретный проект?Как должно быть организовано взаимодействие между классами / объектами?Как объекты должны быть созданы?

Может ли, например, здесь применяться "управляемая событиями архитектура" или "Микроядро"?Некоторые ссылки на полезные ресурсы будут очень благодарны!Заранее большое спасибо!

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Гораздо лучше, если вы проверите книгу на Шаблоны проектирования. Мне действительно нравится этот .

Например, если вам нужно получить некоторые данные от определенного объекта, вам может понадобиться шаблон наблюдателя, чтобы он работал на вас, и как только у объекта есть данные, вы (или другой объект) узнаетеэти данные и могут работать с ним, с другим шаблоном (стратегия может работать, это действительно зависит от того, что вы должны сделать).

Если вам нужно что-то сделать одновременно, проверьте также паттерн Синглтон (ну, отметьте самые важные!).

0 голосов
/ 23 октября 2018

Осторожнее с шаблонами дизайна.Если вы разбросаете их по всему коду, надеясь, что все будет работать отлично, у вас скоро будет нечитабельный, полный беспорядок.Это рецепты, а не решения.

Мой вам совет: возьмите лист бумаги и карандаш, начните рисовать все сущности вашего домена со всеми их реквизитами и посмотрите, как они соотносятся.Если вы хотите серьезно отнестись к этому, вы можете сделать что-то вроде this .

При определении своих сущностей стремитесь к высокой когезии и слабой связи .

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

Что касается слабой связи, это означает, что ваши сущности должны быть независимы друг от друга.Используя приведенный выше пример, предположим, что вы теперь являетесь счастливым владельцем двух тесно связанных классов: один, который читает материал из файла (Reader), и другой, который обрабатывает этот материал (Processor).Теперь предположим, что класс Processor имеет экземпляр класса Reader и вызывает его, чтобы получить входные данные.В этом случае мы можем сказать, что оба класса тесно связаны, так как Processor не будет работать без Reader.В мире ООП решением для этого обычно является использование интерфейсов.Вы можете найти хороший пример здесь .

Определив начальную модель своего домена и собрав как можно больше знаний о нем, вы можете начать думать об архитектуре реализации.Это где вы можете начать думать об архитектурных шаблонах.Архитектура, управляемая событиями, чистая архитектура, MVP, MVVM ... Все будет зависеть от вашего домена.Ваша работа - знать, какой шаблон подойдет лучше всего.Оповещение о спойлере: это может быть чрезвычайно трудно сделать правильно даже для опытных инженеров, поэтому не бойтесь потерпеть неудачу.

Наконец, оставьте шаблоны проектирования на этапе реализации.Их использование полностью зависит от ваших задач и решений.Кроме того, не заставляйте их.В идеале вы решите проблему и, ЕСЛИ ПРИМЕНИМО, вы увидите появление паттерна.Поверьте мне, последнее, что вы хотите, это иметь дело с design patternitis .В любом случае, если вам нужна литература по шаблонам, я настоятельно рекомендую эту книгу .Это здорово, независимо от вашего уровня инженера.

Дополнительная литература:

Удачи!

0 голосов
/ 23 октября 2018

У вас есть фоновая задача, и она действительно может быть использована для прокачки сообщений / очереди событий.Тогда ваша задача переднего плана будет отправлять запросы в этот фоновый поток и асинхронно ждать результата.

Взгляните на книгу "Шаблоны для параллельного программирования".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...