Существует множество способов получения объектов и данных "области приложения" для приложения. Однако может быть полезно определить, какие из общих «компонентов», к которым вам нужен доступ, являются на самом деле просто глобальными, или некоторые из них на самом деле «контекстные». Между глобальными и контекстными компонентами есть разница, возможно, в некоторых случаях тонкая.
В случае утилиты, такой как регистратор, которая наиболее полезна в качестве глобального средства, так как ведение журнала является одной из тех досадных сквозных проблем. Однако во многих случаях информация имеет конкретный контекстный характер и заслуживает того, чтобы быть обернутой в какой-либо объект контекста, доступный только для кода, который фактически выполняется в этом контексте. Контекст иногда бывает трудно определить. Если вы можете идентифицировать его, и вы можете выяснить, как инициализировать и сделать доступным объект контекста в нужное время для нужного кода, вы должны получить лучший продукт с более правильно организованным кодом, чем если бы вы просто собрали кучу данных, доступных во всем мире.
Я рекомендую изучить BDD, Behavior Driven Development, методологию, которая объединяет гибкие методы и методы TDD в более строгую методологию разработки, где контекст играет критическую роль.