Открыты исходники Инфраструктуры

22 августа 2012 г.

Недавно была выложена в открытый доступ инфраструктура для быстрого старта и модульной структуры приложений на .NET Framework 4.0. Исходный код может скачать и доработать любой желающий, каких-либо ограничений или лицензий нет.

История

Когда я начал работать в ИндиКод в 2008 году (тогда она еще так не называлась, а теперь она уже так не называется), мы начали выносить общие части из наших проектов в отдельный проект. Думаю, что это обычная практика во всех IT-компаниях, которые не хотят делать одно и то же от проекта к проекту.

Начало инфраструктуры, которая выложена сейчас, было положено в декабре 2009 года. Судя по коммитам ее портировали со старой версии Зайцев Александр и Крючков Дима. Потом эта инфраструктура постоянно развивалась и дописывалась. Активно в ее разработке участвовали Рахматиллаев Тимур и Сафин Руслан.

В итоге, мы имеем то, что можно взять эту инфраструктуру в свой проект через Nuget и использовать прямо сейчас.

Исходный код

Исходный код выложен по ссылке https://github.com/AlexanderByndyu/ByndyuSoft.Infrastructure.

В него есть что добавить и есть еще куда стремиться. Делайте Pull Request'ы и пишите ваши пожелания.

Установка через Nuget

Текущая версия 1.0.8 выложена в Nuget:

Сейчас после Push версия не собирается на TeamCity и не публикуется автоматом в Nuget. Если у кого-то есть возможность это настроить, то будет очень удобно. На Codebetter.com есть даже бесплатный TeamCity под эти цели.

Примеры

Некоторые примеры использования я показывал в статьях Проблемный шаблон Repository и Заменяем QueryFactory на бестелесный IQueryFactory.

Пример веб-приложения или десктоп приложения должен появится в том же репозитории. Он будет сделан либо силами сообщества, либо мы сами его сделаем.

7 комментариев:

  1. Что-то у вас проблемы с кодировкой в репозитории, в некоторых файлах коменты на русском нечитаемы, например в source/Infrastructure.Domain/IRepository.cs, source/Infrastructure.Domain/IEntity.cs, а вот в source/Infrastructure.Domain/IQueryFactory.cs все ок.
    Файлы не в utf8?

    ОтветитьУдалить
  2. Привет Александр.
    Взглянув на реализацию форм хендлеров, возникло несколько вопросов и едложений:
    - во первых, ModelState, как мне кажется, необходимо сохранять только в случае Redirect резалтов. Форма, к примеру, может быть отослана через ajax, или же, если мы возвращаем ViewResult случае ошибки. В сложных формах ModelState нам не всегда поможет, особенно при изменения ui через js и сохранении части формы в json (или тут есть какие-нибудь хитрости?);
    - что если нужно обойти валидацию, к примеру, для сохранения draft версии entity? На ум приходит реализация какого-нибудь интерфейса типа IFormValidationInspector {bool IgnoreValidationErrors { get; set; }} и оследующей проверке в фом хендлере;
    - и самый главный момент, который меня тревожит, как постуапете с сохранением вне mvc приложения, например, если есть какой-нибудь вин сервис, котором сохраняются данные?

    ОтветитьУдалить
  3. Алексей, спасибо за предложения. Они будут на много ценнее, если придут в виде Pull Request'ов ;) Я бы посмотрел на ваши предложения в коде.


    На счет использовать вне MVC, видимо вопрос про PreSessionNH. Вы можете посмотреть примеры работы с UoW здесь http://blog.byndyu.ru/2010/07/2-unit-of-work_10.html

    ОтветитьУдалить
  4. Получается для контролов которые допустим будут передавать IEnumirable во View. как это делаете в смоей инфроструктуре? я так понимаю не создается Наследник IFormHandler<> (т.к. это команда из CQRS?), просто в методе контролера вызывается нужный query ?

    ОтветитьУдалить
  5. IFormHanlder - это на самом деле команда. Если нам надо не изменять состояние системы, а выбрать из нее данные, то FormHandler не нужен. Я считаю, что запрос можно сделать прямо в методе контроллера при условии, что данные надо будет просто передать во View.

    ОтветитьУдалить

Моя книга «Антихрупкость в IT»

Как достигать результатов в IT-проектах в условиях неопределённости. Подробнее...