В чем преимущество использования Unity Application Block или DI в целом с Entity Framework, как в моем примере - PullRequest
0 голосов
/ 23 июня 2011

В псевдокоде ниже у меня есть 3 слоя: UI, BL и DL для приложения ASP.NET WebForms.Может кто-нибудь дать мне несколько советов о том, зачем мне здесь использовать Dependency Injection и Unity?Я часто использую интерфейсы (в основном для сторонних компонентов, таких как Mail или анализаторы файлов, так что я могу заменить их по мере необходимости, не меняя другие слои), но я не понимаю, почему я должен использовать интерфейсы в объектах EF EntityObjects.Кажется, я не могу найти в Интернете ни одного примера, который продемонстрировал бы практическое преимущество за пределами теоретических нереальных случаев.

namespace Sample.ASP.NET.UI
{

  using Sample.ASP.NET.BusinessLayer;
  using Sample.ASP.NET.DataModel;

  protected class AspxCodeFile
  {
      protected Page_Load()
      {
          GridView.DataSource=BusinesLayer.Products.GetProductsAsList();
      }
   }
}

namespace Sample.ASP.NET.BusinessLayer
{
  using Sample.ASP.NET.DataModel;

  protected class Products
  {
    public static List<Product> GetProductsAsList()
    {
      EdmxEntities DB=new EdmxEntities();
      return DB.Products.ToList<Product>();
    }
  }
}

namespace Sample.ASP.NET.DataLayer
{
    // wrapper namespace for Entity Framework designer
    // generated code off SQL Server 2008 database
    // where one of the tables is called Products
    // and designer created Product EntityObject
    // this Product entity is referenced in both
    // UI and BL.
}

Ответы [ 2 ]

0 голосов
/ 27 июня 2011

Помимо замечаний Ладислава, есть еще несколько: -

  1. Вы можете использовать Unity для украшения методов и классов сквозными задачами (в Unity это называется поведением). Вы можете использовать поведение где угодно, но я использовал это с EF для таких вещей, как: -

    • Автоматическое создание / сохранение / очистка контекстов вашего объекта
    • Автоматическое кэширование, например справочные данные
    • Регистрация времени вызовов методов для поиска узких мест производительности в DAL
  2. Немного больше связано с дизайном, но, используя принцип инверсии зависимости, вы можете более свободно связать вашу систему, например, ваш пользовательский интерфейс не ссылается на бизнес-уровень (и потенциально отделен от EF полностью в зависимости от того, как вы генерируете свои сущности).

0 голосов
/ 23 июня 2011

В вашем сценарии вам это явно не нужно.Люди используют внедрение зависимостей, когда им нужно внедрить зависимости и заменить их другой реализацией - наиболее распространенная причина - автоматическое тестирование и фиктивные / фиктивные / заглушки зависимости.Еще одна причина - динамическое поведение.

...