Простейшая система документооборота

Добрый вечер, уважаемые разработчики. На днях я решил поработать с такими вещами, как ASP.NET Identity и Entity Framework 6. Для этого я создал простейшую систему документооборота, работающую на ASP.NET MVC 5.1.

Подробное описание того, что из этого получилось, вы можете прочитать на странице проекта в гитхаб — tiny-workflow.

Теперь несколько слов о личных впечатлениях.

ASP.NET Identity

Первое, о чём хотелось бы поговорить — это ASP.NET Identity. Это новая технология, которая пришла на смену классическим система ASP.NET Membership и Simple Membership. Она ответственна за такие вещи, как авторизация и аутентификация.

Создав проект ASP.NET MVC 5, вы сразу же получите контроллер AccountController, в котором реализованы такие базовые операции, как Регистрация, аутентификация и работа с ролями.

Технология ASP.NET Identity вызывает у меня весьма противоречивые чувства. Она содержит в себе, как плюсы, так и минусы.

Достоинства ASP.NET Identity:

  • Прекрасная интеграция с стеком Microsoft
  • Удобные атрибуты (аннотации): [Authorize], [Authorize(Roles = «roleName1, roleName2»)]
  • Доступные свойства и методы: User.Identity.Name, User.Identity.IsAuthenticated, User.IsInRole(«roleName1»)

Недостатки ASP.NET Identity:

  • Одна технология ответственна сразу за огромное количество вещей: аутентификацию, авторизацию, работу с ролями. Из-за этого получается некоторая каша-малаша.
  • Сильная привязка к Entity Framework. Класс UserManager требует для создания DbContext — класс, использующийся в EF для представления базы данных. Как работать с этим с помощью NHibernate — не понятно.

Entity Framework 6

Последний раз я работал с EF, когда была версия 4, или около того. Тогда я использовал подход Database First. В принципе, никаких серьёзных минусов я тогда не увидел.

Сейчас я решил попробовать подход Code First. Обычно я сначала проектирую схему в Toad Data Modeler, затем — получаю DDL (Data Definition Language) скрипт. После — генерирую POCO классы, а также миграции для Fluent Migrator с помощью Entity Developer.

В этот раз у меня было всего 5 сущностей. Поэтому, я решил, что и кодом смогу выразить все свои бизнес-объекты. На самом деле, это не так сложно (даже foreign key нормально создаются).

Плюсы Entity Framework 6 Code-First:

  • Невероятно крутая интеграция (в отличии от NHibernate) с другими продуктами от MS.
  • Крайне простое использование миграций. Не нужно руками писать миграции (как нужно делать в Fluent Migrator). Всё само генерируется из POCO классов.
  • Прекрасная реализация LINQ (я встретился только с одним багом: не работой метода ToString() в запросах к Enum-тапам).

Минусы Entity Framework 6 Code-First:

  • Привязка EF к паттернам Unit of Work и Repository. Это связано с тем, что EF требует для работы объект класса DbContext, который крайне желательно создавать 1 раз для запроса.

Буду рад ответить на любые вопросы в комментариях.

Категории: Программирование

Метки: ,