рдореЙрдбрд▓ рджреЗрдЦреЗрдВ рдбрд┐рд╕реНрдкреИрдЪрд░ (mvc рдкрд░ cqrs)

рдЫрд╡рд┐



рджрд┐рди рдХреЗ рд╕рднреА рд╕рдордп рдХреА рддрд░рд╣, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрдирдХреЛрдбрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрдХ рдФрд░ рдШрдЯрдХ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореЙрдбрд▓ рд╡реНрдпреВ рдбрд┐рд╕реНрдкреИрдЪрд░ (рдПрдорд╡реАрдбреА) - рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреЗ рдмреАрдЪ рд╕рд╛рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб (рдЕрд░реНрдерд╛рддреН, asp.net mvc рдирд┐рдпрдВрддреНрд░рдХ) рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



Habr├й рдкрд░ IML рдФрд░ CQRS рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд▓реЗрдЦ рд╣реИрдВ рдЬреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ

  1. рдкреЗрд╢ рд╣реИ рдЖрдИ.рдПрдо.рдПрд▓.
  2. рдЗрдирдХрдорд┐рдВрдЧ CQRS

    рдиреЛрдЯ: рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЙрд╕ рд╕рдордп Habr├й рдкрд░ рдЦрд╛рддреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ рдФрд░ рдпрд╣ рдХрд┐рд╕реА рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рдЧрдпрд╛

  3. рдЖрдИрдПрдордПрд▓ рдмрдирд╛рдо рдПрдВрдЧреБрд▓рд░рдЬ

    рдиреЛрдЯ: рд▓реЗрдЦ рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХреА рдЧрдИ (рдЙрджреНрджреЗрд╢реНрдп рдФрд░ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ)

  4. IMl рдмрдирд╛рдо AngularJs рдХрд╛ рдЙрддреНрддрд░ рджреЗрдВ

    рдиреЛрдЯ: рд╕рдлрд▓рддрд╛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╣реИ



MVD рдХреБрдЫ рд▓реЗрдЦреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди IML рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХреНрд░рдо рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ ...



рдХреНрдпреЛрдВ?



рдПрдХ asp.net mvc + cqrs рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ



: Query , Action





controller ┬л┬╗ Mediator ( ), Interface Generic, , , Controller/Action.



Model View Dispatcher (MVD) тАФ Command/Query ┬л┬╗ asp.net mvc. , MVD

$.get('@Url.Dispatcher().Query(new GetUserDetailsQuery()).AsJson()',callback)

      
      











MVC ???



, MVD :



DispatcherController ( 1.1 nuget), DispatcherControllerBase

public class DispatcherController : DispatcherControllerBase
{        
    public DispatcherController()
   : base(typeof(T).Assembly)
    {    }    
}

      
      





: Assembly Command/Query



DispatcherControllerBase (Actions):

Query(string incType, string incGeneric, bool? incValidate)
Render(string incView, string incType, string incGeneric)
Push(string incType, string incGeneric)
Composite(string incTypes)
QueryToFile(string incType, string incGeneric, string incContentType, string incFileDownloadName)

      
      





url, Push command

Url.Action("Push", "Dispatcher", new  { incType = typeof(Command).Name } )

      
      





DSL (domain specific language)

Url.Dispatcher().Push(new Command())

      
      





: ( ), ( ..)









: MVD asp.net mvc, ( generic) Controller, httphandler http .



?



MVD , - asp.net mvc:

: GitHub





MVD DispatcherController ( ), CQRS Command/Query Url.Dispatcher ( , ) url, , IML.



: Inc-todo



Action Attributes



(-╠Б тАО), , , :





Incoding Framework ( js framework Server/Client ) MVD .

@(using(Html.When(JqueryBind.InitIncoding)      
                         .Direct()
                         .OnSuccess(dsl => dsl.Self().Core().Form.Validation.Parse())
                         .When(JqueryBind.Submit)
                         .PreventDefault()
                         .Submit()
                         .OnError(dsl => dsl.Self().Core().Form.Validation.Refresh())
                         .AsHtmlAttributes()
                         .ToBeginForm(Url.Dispatcher().Push(new AddUserCommand()))))
{
 @Html.TextBoxFor(r=>r.Name)
 @Html.ValidationMessageFor(r=>r.Name)
}

      
      





: , html helper

asp.net mvc Html.BeginForm ( iml html attributes), :





, Validation.Refresh Push dispatcher contoller

     if (!ModelState.IsValid)
        return IncodingResult.Error(ModelState)

     try
     {
         dispatcher.Push(composite);
         return IncodingResult.Success();
      }
      catch (IncWebException exception)
      {
                foreach (var pairError in exception.Errors)
                {
                    foreach (var errorMessage in pairError.Value)
                        ModelState.AddModelError(pairError.Key, errorMessage);
                }
                return IncodingResult.Error(ModelState)
      }

      
      





: - , Incoding Framework TryPush MVD push

catch IncWebException ( ModelState), exception global.asax.



?


, Incoding Framework , asp.net mvc

public ActionResult Add(AddUserCommand command)
{
    if (ModelState.IsValid)
        return View(command);

    return Execute(command);
}

      
      





ModelState , View, command (, Container , ), . :







MVD Action, ┬л┬╗ , . MVD IML, Selector routes, , - , ┬л┬╗ (pure js) .

, MVD ( ) , Controller Action ( 5% тАФ 10%) .



, ?



MVD 10-15% , , end point ( wcf endpoint)тАж



, ?


api :




, mvd end-points




: , , , , .





: , API . , , , , - , .



P.S. ( beta) Incoding Framework nuget, . , ( bugtracker)



: beta ( ) , ,



All Articles