Разница между созданием экземпляра класса напрямую или созданием экземпляра через управляющий интерфейс в c # - PullRequest
1 голос
/ 25 февраля 2010

Я работаю над проектом asp.net с трехслойной реализацией. Уровень DataAccess есть. DataAccessContract - это уровень, который содержит все интерфейсы, которые реализуют классы на уровне доступа к данным. Аналогично у нас есть бизнес-уровень и контракт businessLayer.

Теперь, когда мы вызываем доступ к данным из бизнес-уровня, мы называем

IUserDAL userControllerDAL=new UserDAL();

UserDAL находится внутри DataAccess, а IUserDAL находится внутри DataAccessContract.

Я мог бы сделать это так

UserDAL user=new UserDAL();

В чем разница между этими двумя подходами и насколько первый лучше второго? Это какой-то шаблон в первом случае. Пожалуйста, объясните несколько примеров.

Ответы [ 5 ]

2 голосов
/ 25 февраля 2010

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

0 голосов
/ 16 декабря 2010

Существует большое преимущество, если вы хотите использовать инверсию управления. Вы можете гуглить об этом.

0 голосов
/ 25 февраля 2010

Я хотел бы добавить, что работа с интерфейсами лучше для реализации контейнера IoC.

0 голосов
/ 25 февраля 2010

Цель - отделить контракт (интерфейс, с которым вы работаете) от реализации (класс, реализующий этот интерфейс).

Предположим, вы хотите реализовать Resal Randomizing DAL (просто так). При выборе варианта 1 вам нужно либо наследовать от DAL, либо изменить все места, где используется DAL.

Наследование проблематично: реализация DAL может быть закрыта, вам может потребоваться наследование от чего-то другого и т. Д.

Во втором случае вы делаете свой класс автономным и просто изменяете экземпляр:

IUserDAL dal;
if (AprilFirst)
   dal = new ReasultRandomizingUserDAL();
else
   dal = new UserDAL();

Объект, экземпляр которого создан, идентичен.

0 голосов
/ 25 февраля 2010

См. Почему важны интерфейсы

Должен ответить на ваш вопрос: D

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