> -- Comdiv писал(а):
> Это можно решить иначе. Files.File может быть даже нерасширяемым типом, который содержит только платформо-неспецифический код, который вызывает, содержащийся в нём экземпляр полностью абстрактного типа, который, в идеале, содержит только минимально необходимый платформо-специфический код.

Я применил такую схему для модуля Windows, когда делал Тайлер (плиточный интерфейс).
Там, как Д.В. написал: в Windows был только интерфейс, вся реализация в HostWindows, и она совмещала платформо-зависимые и независимые части. Например, к платформо-независимым относится понятие Front и Target окна - это не зависит от Лин-Вин.

Я интуитивно отделил платформо-независимые части и "поднял" их в Windows и, в основном, сделал свободными процедурами, поскольку переопределение или расширение не предусматривается. А для всего платформо-зависимого выделил новый тип WindowBackend, который в Windows только абстрактный интерфейс, а вся реализация в HostWindows. Модуль HostWindows существенно упростился, сократился в 2 раза - легче будет переносить под другие платформы.

Но в этой теме про критерии. И вот вопрос: критерий хорош, предложенный Александром; однако если руководствоваться только им, то TextModels.StdModel вполне можно экспортировать и позволять расширять. Значит надо формальный критерий как-то уточнять или дополнять.