Недавно была выложена в открытый доступ инфраструктура для быстрого старта и модульной структуры приложений на .NET Framework 4.0. Исходный код может скачать и доработать любой желающий, каких-либо ограничений или лицензий нет.
История
Когда я начал работать в ИндиКод в 2008 году (тогда она еще так не называлась, а теперь она уже так не называется), мы начали выносить общие части из наших проектов в отдельный проект. Думаю, что это обычная практика во всех IT-компаниях, которые не хотят делать одно и то же от проекта к проекту.
Начало инфраструктуры, которая выложена сейчас, было положено в декабре 2009 года. Судя по коммитам ее портировали со старой версии Зайцев Александр и Крючков Дима. Потом эта инфраструктура постоянно развивалась и дописывалась. Активно в ее разработке участвовали Рахматиллаев Тимур и Сафин Руслан.
В итоге, мы имеем то, что можно взять эту инфраструктуру в свой проект через Nuget и использовать прямо сейчас.
Исходный код
Исходный код выложен по ссылке https://github.com/AlexanderByndyu/ByndyuSoft.Infrastructure.
В него есть что добавить и есть еще куда стремиться. Делайте Pull Request'ы и пишите ваши пожелания.
Установка через Nuget
Текущая версия 1.0.8 выложена в Nuget:
- Infrastructure.Common
- Infrastructure.Domain
- Infrastructure.NHibernate
- Infrastructure.NHibernate.Conventions
- Infrastructure.Web
Сейчас после Push версия не собирается на TeamCity и не публикуется автоматом в Nuget. Если у кого-то есть возможность это настроить, то будет очень удобно. На Codebetter.com есть даже бесплатный TeamCity под эти цели.
Примеры
Некоторые примеры использования я показывал в статьях Проблемный шаблон Repository и Заменяем QueryFactory на бестелесный IQueryFactory.
Пример веб-приложения или десктоп приложения должен появится в том же репозитории. Он будет сделан либо силами сообщества, либо мы сами его сделаем.
Что-то у вас проблемы с кодировкой в репозитории, в некоторых файлах коменты на русском нечитаемы, например в source/Infrastructure.Domain/IRepository.cs, source/Infrastructure.Domain/IEntity.cs, а вот в source/Infrastructure.Domain/IQueryFactory.cs все ок.
ОтветитьУдалитьФайлы не в utf8?
Спасибо, сейчас посмотрю.
ОтветитьУдалитьЗапушил фикс
ОтветитьУдалитьПривет Александр.
ОтветитьУдалитьВзглянув на реализацию форм хендлеров, возникло несколько вопросов и едложений:
- во первых, ModelState, как мне кажется, необходимо сохранять только в случае Redirect резалтов. Форма, к примеру, может быть отослана через ajax, или же, если мы возвращаем ViewResult случае ошибки. В сложных формах ModelState нам не всегда поможет, особенно при изменения ui через js и сохранении части формы в json (или тут есть какие-нибудь хитрости?);
- что если нужно обойти валидацию, к примеру, для сохранения draft версии entity? На ум приходит реализация какого-нибудь интерфейса типа IFormValidationInspector {bool IgnoreValidationErrors { get; set; }} и оследующей проверке в фом хендлере;
- и самый главный момент, который меня тревожит, как постуапете с сохранением вне mvc приложения, например, если есть какой-нибудь вин сервис, котором сохраняются данные?
Алексей, спасибо за предложения. Они будут на много ценнее, если придут в виде Pull Request'ов ;) Я бы посмотрел на ваши предложения в коде.
ОтветитьУдалитьНа счет использовать вне MVC, видимо вопрос про PreSessionNH. Вы можете посмотреть примеры работы с UoW здесь http://blog.byndyu.ru/2010/07/2-unit-of-work_10.html
Получается для контролов которые допустим будут передавать IEnumirable во View. как это делаете в смоей инфроструктуре? я так понимаю не создается Наследник IFormHandler<> (т.к. это команда из CQRS?), просто в методе контролера вызывается нужный query ?
ОтветитьУдалитьIFormHanlder - это на самом деле команда. Если нам надо не изменять состояние системы, а выбрать из нее данные, то FormHandler не нужен. Я считаю, что запрос можно сделать прямо в методе контроллера при условии, что данные надо будет просто передать во View.
ОтветитьУдалить