Как отделить интерфейс от реализации - PullRequest
2 голосов
/ 27 марта 2012

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

Я могу думать об этом, используя отражение, когда слой отвечает за обслуживание объектов, которые преобразуются в интерфейсы. Фактическое создание типов осуществляется путем отражения и сохраняется в словаре, где ключом является интерфейс и значение объекта реализации. Таким образом, клиентский код не имеет представления о типе реализации.

Есть ли шаблон дизайна, чтобы сделать это без отражения?

Заранее спасибо за ответы

Ответы [ 3 ]

1 голос
/ 27 марта 2012

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

Дело в том, что в обоих случаях в какой-то момент должен быть «кто-то», который решает, какой тип real создать.В случае логики на основе плагинов это может быть, скажем, PluginManager, в другом случае это будет какой-то factory метод / calss.

Шаблон проектирования IoC , если вы 'не заинтересован в.

Надеюсь, это поможет

1 голос
/ 27 марта 2012

Шаблон называется инверсией контроля (IoC).Наиболее распространенное применение этого метода - «Внедрение зависимостей» (DI).

Вы можете найти книгу «Внедрение зависимостей» в .NET ценным ресурсом по этой теме.

1 голос
/ 27 марта 2012

Да, то, что вы здесь описываете, называется IOC (инверсия контейнера управления) - кроме отражения вы можете использовать конфигурацию (в app / web.config) или загрузку через код.

Посмотрите на некоторые популярныеМОК, такие как StructureMap и Ninject

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...