Как и во всех абстракциях в разработке программного обеспечения, вы просто перемещаете «проблему», когда используете фреймворк. Фреймворк заботится об определенных вещах, поэтому другим частям вашего приложения не нужно знать, как это сделать. Например. если вы используете внедрение зависимостей, классы, которые вводятся, не должны знать, как создавать свои зависимости, это обрабатывается структурой внедрения зависимостей.
Но это только означает, что знание / ответственность перемещены. Никогда, никогда, 1003 * не перемещается. Так что да, конечно, ваш код неявно зависит от этой структуры. Но если вы перемещаете связанный с фреймворком код в одно место, возможно даже вводите некоторые интерфейсы для его переноса, вы можете иногда сделать так, чтобы остальная часть вашего кода зависела от интерфейса, класса или фреймворка, вместо конкретных рамок.
например. Я ввел в свой код интерфейс IIocContainer , используя только методы Resolve . Объект, реализующий этот интерфейс, обладает знанием , как вызывать конкретную платформу Ioc / DI. Но это знание только в этом одном объекте. Остальная часть моего приложения (где это необходимо) знает только об интерфейсе IIocContainer и поэтому не зависит от конкретной среды. Если я изменяю платформу, мне нужно только изменить ссылки и конфигурацию (которая может быть в XML и вообще не влиять на код) и использовать другой объект, который реализует IIocContainer для этого контейнера.
Когда вы говорите об инфраструктурах, которые непосредственно влияют на структуру / архитектуру вашего кода (например, базовыми классами, соглашениями об именах и т. Д.), Это означает, что становится намного сложнее абстрагироваться от конкретной платформы. Вы могли бы , но то, что вы в основном делаете, - это написание своего собственного фреймворка на другом фреймворке. Это не стоит того, потому что, в конце концов, если вы собираетесь переключать структурные структуры, это всегда будет большой работой, либо путем прямой переписки для этой структуры, либо путем абстрагирования структуры от .
Я думаю, что вы можете сказать это просто так: если вы используете каркас, чтобы перенести проблему «много структурного сантехнического процесса» в эту каркас (пусть каркас обрабатывает сантехнику для вас), и вы переключаете каркас Вы сразу же получите проблему «много структурных сантехнических работ». : -)