Я понимаю, что с IOC вы можете заменить реализации, просто отредактировав файл конфигурации и т. Д.

НО, что происходит, когда классы связаны с определенными таблицами базы данных и sprocs, вы не можете просто поменять местами реализацию, поскольку классы/сущности привязаны к определенным таблицам и хранимым процедурам.

Я прямо здесь?

0
mrblah 6 Сен 2009 в 00:04

2 ответа

Когда вы внедряете экземпляр класса A в экземпляр класса B, вы делаете это на том основании, что A выполняет контракт, на который может полагаться B, обычно определяемый интерфейсом (но также может быть выполнен классом или суперклассом). Если B не удовлетворяет этому контракту, поведение не определено.

Итак, все сводится к следующему: когда вы взаимодействуете таким образом, вы не должны беспокоиться о том, совпадают ли структуры таблиц или нет. Вы должны быть обеспокоены правильностью интерфейса.

Кроме того, по моему опыту, подобные ОО-сущности в смысле ORM, как правило, не внедряются. Обычно инъекция происходит с поставщиками услуг.

4
cletus 6 Сен 2009 в 00:08
Эта способность замещения, о которой вы говорите, известна как принцип замещения Лискова.
 – 
Llyle
6 Сен 2009 в 00:20

Что Клетус говорил...

public class CustomerService //may implement extend from some base
{
   public ICustomerDao customerDAO { get; set; } //the injected object

}

CustomerService — это класс вашего бизнес-уровня (например), в который вы можете внедрить некоторый CustomerDao с внедрением зависимостей, используя контейнер IoC. То, что вы можете вводить, определяется контрактом ICustomerDao. Таким образом, все, что реализует это, будет разрешено вводить сюда.

1
Juri 6 Сен 2009 в 00:17