- PVSM.RU - https://www.pvsm.ru -
Пара слов о себе — я работаю в компании Incoding Software, которая много лет успешно занимается аутсорсингом, выполняя Internet и Intranet проекты в различных областях ( медицина, доски объявлений, социальные сети и многое другое)
Incoding Framework — это клиент / серверное решение для разработки веб проектов на платформе asp.net mvc.
Состоит из трех частей:
примечание: особенность Incoding Framework в том, что каждая часть интегрируется между собой ( IML использует MVD для AJAX, MVD исполняет CQRS и т.д ), но позволяет применять по отдельности ( на Nuget 3 независимых пакета )
Так как рассмотреть каждую часть framework в одной статье не получится, то будет сделан акцент на самом интересном компоненте нашей библиотеки — это IML. Почему я выделил именно клиентскую часть, дело в том, что CQRS, Event Broker и Unit Test имеют множество аналогов в “мире” .net и быстро заинтересовать ( хотя мы имеем ряд особенностей ) крайне трудно, но IML это инструмент, который пока не имеет прямых аналогов.
У IML нету прямых аналогов, но конечно есть косвенные:
Вам приходится бороться со всеми сложностями:
С появлением Jquery разработка веб приложений стала проще, но с ростом сложности приложений на клиентской стороне скриптовый подход к написанию кода стал не оправдан из-за возрастающего уровня дубляжа, а такие «особенности» JavaScript, как глобальные функции и переменные ещё больше усложняют поддержку крупных проектов.
Архитектура MVVM или MVС, построенная на JS, обеспечивает коммуникацию с сервером, но когда на стороне клиента появляется своя модель, то приходится её синхронизировать с той, что на серверной стороне и это разделяет разработчиков на front end и back end.
примечание: идея разделения программистов на серверных и клиентских, кажется крайне неудачной, потому что приходится согласовывать их действия и всегда, кто-то работает быстрее, а кто-то медленнее, но если этого не делать, то разработчик должен знать особенности разработки на каждой стороне.
Чтобы не строить архитектуру с нуля, можно воспользоватся готовыми JavaScript framework, например AngularJS, но тогда, Вам надо писать Controller, Routes и многое другое, повторяя уже существующий код на asp.net mvc.Главная проблема, всех javascript framework, это то, что Вам надо писать JS код
В последние время развивается тенденция написания JavaScript, используя типизированный интерпретатор или альтернативный язык
TypeScript — это возможность писать JavaScript, но в C# подобном синтаксисе. В чем тогда отличие TypeScript от IML:
IML предлагает набор методов для написания любых клиентских сценариев без JavaScript кода. Браузер работает по принципу событийной модели, и как показала практика, вариантов сценариев не так много.
Давайте рассмотрим стандартный алгоритм:
Html.When(JqueryBind.InitIncoding)
.Do()
.AjaxGet(Url.Dispatcher().Query(GetCardsQuery { Client = Html.Selector.Name(r=>r.Client) }))
.OnSuccess(dsl => dsl.Self().Core().Insert.WithTemplate(idTemplate.ToId()).Html())
.AsHtmlAttributes()
.ToDiv()
IML язык декларативный, поэтому его конструкции легко можно описать
Если выделить основные преимущества IML, то:
Язык C# обладает, наверно, самым богатым функционалом и важно то, что все это можно использовать в рамках Вашей Razor страницы, то есть анонимные функции, лямбда и многое другое, что позволяет проводить рефакторинг Вашего приложения.
@Html.Project().Load(setting =>
{
setting.Template = Selector.Jquery.Id(tmplId);
setting.Url = Url.Dispatcher().Query(GetCardsQuery { Client = Html.Selector.Name(r=>r.Client) });
})})
примечание: код выполняет туже задачу, что была рассмотренная в первом примере
@{
Func<bool, mvchtmlstring=""> createComplete = (value) =>
Html.When(JqueryBind.Change)
.Do()
.AjaxPost(Url.Dispatcher().Push(new SomeCommand
{
IsAdmission = each.For(r => r.IsAdmissionComplete)
}))
.OnSuccess(dsl => // something )
.AsHtmlAttributes()
.ToCheckBox(value);
}
@using (each.Is(r => r.IsComplete))
{
@createComplete(true)
}
@using (each.Not(r => r.IsComplete))
{
@createComplete(false)
}
Приведу список отрицательных моментов Incoding Framework
Данная статья является компоновкой самых важных моментов всех постов из нашего блога, поэтому те, кто заинтересуются, могут ознакомится со всем материалом.
В начале я написал, что наша компания занимается разными проектами, я подчеркнул, что круг решаемых задач, который стоит перед Incoding Framework очень большой. Многие скажут, что практически каждая фирма разрабатывает для себя свой framework, но мне кажется у нас получился инструмент, который может быть использован и другими командами.
P.S. Рад услышать отзывы и замечания
Автор: vkopachinsky
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/asp-net-mvc/53172
Ссылки в тексте:
[1] Начнем : http://blog.incframework.com/ru/get-started/
[2] Не хочу читать, дай видео: http://www.techdays.ru/speaker/Wlad
[3] А как Json в Html делаете ?: http://blog.incframework.com/ru/client-template/
[4] Про MVD подробней: http://blog.incframework.com/ru/model-view-dispatcher/
[5] Не нравится мне это : http://blog.incframework.com/ru/faq/
[6] А песочница есть? : http://incframework.com/en-US/TutorialExecutable
[7] Я знаю Jquery, может на примерах ?: http://blog.incframework.com/ru/jqyery-style-vs-iml-style/
[8] Как то юзал, Ajax asp.net mvc: http://blog.incframework.com/ru/ajax-actionlink-vs-iml/
[9] Хочу посмотреть не большой проект : https://github.com/IncodingSoftware/Inc-Music-Store
[10] А покрупнее ?: https://github.com/IncodingSoftware/Browsio
[11] Хочу знать, как это работает : http://blog.incframework.com/ru/iml-how-it-work/
[12] Ты не понял, покажи исходники: https://github.com/IncodingSoftware/Incoding-Framework
[13] Слышал, есть CQRS : http://blog.incframework.com/cqrs-vs-n-layer/
[14] Так а где же особенности в CQRS: http://blog.incframework.com/ru/cqrs-advanced-course/
[15] Источник: http://habrahabr.ru/post/209734/
Нажмите здесь для печати.