Я разрабатываю систему, состоящую из множества независимых подсистем. Двумя из таких подсистем являются Window и подсистема GraphicsAdapter.
Для GraphicsAdapter требуется низкоуровневый дескриптор окна (дескриптор окна HWND или X11, в зависимости от операционной системы), а подсистема Window - это способ абстрагирования этих специфичных для ОС API.
Если бы подсистема Window предоставляла доступ к низкоуровневым дескрипторам API, был бы большой потенциал для нарушения инкапсуляции.
Что, если он позволял окнам переходить в полноэкранный режим и назад, но должен был запускать события, предупреждающие систему об этих изменениях, а низкоуровневый маркер использовался для переключения в полноэкранный режим без его ведома?
Как я могу гарантировать, что дескриптор будет безопасно переноситься из подсистемы Window в GraphicsAdapter без злоупотребления и при этом быть достаточно гибким, чтобы впоследствии можно было добавлять другие подсистемы, такие как GraphicsAdapter, при этом поддерживая безопасность типов?
Есть ли способ инкапсулировать дескрипторы таким образом, чтобы Direct3D и OpenGL могли получить достаточно доступа из дескриптора для работы должным образом?
- редактировать
Помимо безопасного переноса дескрипторов из одной подсистемы в другую, зная, например, что подсистемы могут быть написаны другой командой кодировщиков, есть ли способ напомнить им о способе использования дескриптора?
Комментарии - очевидный выбор, но что-то навязанное компилятором - это то, что я действительно ищу ...