2017-01-07 1 views
0

Я использую следующий шаблон/стиль в своих приложениях/программах и хочу знать, является ли это общей моделью, которую я не знаю.Это общий шаблон дизайна?

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

У меня есть один класс/тип, который представляет только мое состояние/данные, которые не имеют логики. Большую часть времени я называю его Контекст, ExecutionContext или RuntimeContext. У меня также есть несколько классов/типов, которые содержат только логические функции без учета состояния (в статических методах C# в статических классах). После моей начальной точки приложения я сначала создаю контекст и использую его в качестве аргументов для своих функций. Контекст содержит состояние жалобы/данные приложения, а все мои статические функции/методы манипулируют контекстом. В конце цепочки функций и выполнения вызова/выполнения, и контекст содержит конечное состояние, если мне нужны выходные данные.

Я пытаюсь создать картину, визуализировать этот подход

enter image description here

Преимущества этих картины

  1. я могу простой тест моей логика (небольшие кусочки статических функций) с unittest
  2. не так сложно использовать параллельный код (только для контекста нужен потоковый код)
  3. зависимости от других систем, в основном разделенных как абстракции (интерфейсы) в контексте (например, IDbContext). Это упрощает испытания большого пространства

И вот теперь мой вопрос. Это общий шаблон? Когда да, как это называется?

Спасибо за каждый намек! :)

С уважением

+5

Возможно, вы захотите перейти к обмену программным обеспечением. – pvg

+2

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

+0

Вероятно, лучшие присадки будут абстрактной фабрикой или цепочкой ответственности из того, что я вижу. Много вещей, чтобы исследовать здесь все же. https://social.msdn.microsoft.com/Forums/en-US/af062e83-3e61-45d4-aeaa-d30b4366c6a2/the-23-gang-of-four-design-patterns-cheat-sheet?forum= architecturegeneral http://www.dotnettricks.com/learn/designpatterns/gang-of-four-gof-design-patterns-in-net – Netferret

ответ

0

Это выглядит как Dataflow.

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

+0

Thx для подсказки Asti. Ссылка помогает мне в поиске – user1481065

+0

@ user1481065 Я реализовал полную систему потока данных с необходимыми свойствами для имитации структур управления потоком. Сообщите мне, если вы хотите больше деталей. – Asti

0

Когда вы выдаете запрос на ASP.NET MVC, то есть запись, и в конце концов возвращает вывод. ASP.NET MVC является открытым исходным кодом, и есть тонны диаграмм, которые объясняют весь трубопровод и как он работает. Он также очень настраиваемый, поэтому разработчики могут подключать свои собственные классы, перехватывать определенные события, перехватывать определенные части (фильтры, аутентификацию, авторизацию и т. Д.).

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

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

Here - это диаграмма на случай, если вы заинтересованы.

0

Хорошо, это распространено в приложениях в стиле IoC, где службы/репозитории являются одиночными и, следовательно, безстоящими.

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

Также рассмотрите механизм ThreadLocal<> в .NET. Таким образом, вам не нужно передавать свой контекст явным, а не доступ к глобальной переменной переменной, содержащей ее (но тогда - вам нужно следить, когда ветвящиеся потоки, другая тема, которую обрабатывает IoC/DI).