
рд▓рдЧрднрдЧ рддреАрди рд╕рд╛рд▓ рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВ рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рднрдВрдбрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдореВрд░реНрдд рд╕реЗ рдореЗрд░реЗ
рдЗрдирдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ред рддрдм рд╕реЗ, рдореИрдВрдиреЗ рдЙрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рд╣рдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ рдореМрдЬреВрджрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдм рдореБрдЭреЗ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдИ рд╡реИрд▓реНрдпреВ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред
рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ:
- ORM рдврд╛рдВрдЪреЗ рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдХреЗ рддрддреНрд╡
- рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рдиред
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
public interface IConferenceRepository { IRavenQueryable<Conference> Query(); Conference Load(Guid id); }
рдЕрдиреБрд░реЛрдз рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдЖрдорддреМрд░ рдкрд░ рдХреБрдЫ рдФрд░ рд▓рд╛рдЗрдиреЗрдВ рд▓реЗрддрд╛ рд╣реИ:
public interface IConferenceRepository { IEnumerable<Conference> FindAll(); IEnumerable<Conference> FindFuture(); IEnumerable<Conference> FindFree(); IEnumerable<Conference> FindPaid(); }
рдпрд╣рд╛рдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддреА рд╣реИред рджреЛрдиреЛрдВ рдорд╛рдорд▓реЗ рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдореВрд▓реНрдпрд╡рд╛рди рд╣реИрдВред рдпрджрд┐ рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рдореЗрд░реЗ ORM рд╕реЗ рд╡рд┐рдШрдЯрди рдХрд░рдирд╛ рд╣реИ, рддреЛ рдореИрдВ рдкрд╣рд▓рд╛ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░реВрдВрдЧрд╛, рдФрд░ рд╢рд╛рдпрдж рджреВрд╕рд░рд╛ рднреА рдЪрд╛рд▓реВ рдХрд░ рджреВрдВрдЧрд╛ред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдУрдЖрд░рдПрдо рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧрд░реНрднрдкрд╛рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ? рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ - ORM рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рдЕрдореВрд░реНрдд рдХрд░рдирд╛ рдореБрдЭреЗ рдЕрдкрдиреА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред ORM рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдореВрд░реНрдд рд╣реИ, рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреБрдж рд╕реЗ рдкреВрдЫрдирд╛ рд╣реИ,
рдХреНрдпрд╛ рд╣рдореЗрдВ рдЕрдореВрд░реНрддрддрд╛ рдХреА рдЕрдореВрд░реНрддрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ?
рдЧрд╣рд░реА рдЦреБрджрд╛рдИрд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЗрд╕ рд╕рд╡рд╛рд▓ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдордиреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛? рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ "
рдкрд░реАрдХреНрд╖рдгрдиреАрдпрддрд╛ " рдХреЗ рдирд╛рдо рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддреЛ рдлрд┐рд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
public ActionResult Index() { RavenQueryStatistics stats; var posts = RavenSession.Query<Post>() .Include(x => x.AuthorId) .Statistics(out stats) .WhereIsPublicPost() .OrderByDescending(post => post.PublishAt) .Paging(CurrentPage, DefaultPage, PageSize) .ToList(); return ListView(stats.TotalResults, posts); }
рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ? рдирд╣реАрдВред рдпрджреНрдпрдкрд┐ рдпрджрд┐ рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╝рддреА рд╣реИ, рддреЛ рднреА рд╣рдо рдЗрд╕рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рдЕрдХреЗрд▓реЗ рдЗрд╕ рдПрдХ рд╡рд┐рдзрд┐ рддрдХ рд╕реАрдорд┐рдд рд░рдЦреЗрдВрдЧреЗред рдпрджрд┐ рд╣рдо рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдпрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреБрд░реЛрдз рд╕реНрд╡рдпрдВ рдПрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рд░рд╣реЗрдЧрд╛ред рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдХреНрдпрд╛ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИ - рдирд┐рдпрдВрддреНрд░рдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдореЗрдВ?
рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛:
public ActionResult Archive(int year, int? month, int? day) { RavenQueryStatistics stats; var postsQuery = RavenSession.Query<Post>() .Include(x => x.AuthorId) .Statistics(out stats) .WhereIsPublicPost() .Where(post => post.PublishAt.Year == year); if (month != null) postsQuery = postsQuery.Where(post => post.PublishAt.Month == month.Value); if (day != null) postsQuery = postsQuery.Where(post => post.PublishAt.Day == day.Value); var posts = postsQuery.OrderByDescending(post => post.PublishAt) .Paging(CurrentPage, DefaultPage, PageSize) .ToList(); return ListView(stats.TotalResults, posts); }
рдлрд┐рд░, рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рдпрд╣ рдЕрднреА рд╣реИред рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдХреЛрдб рдмрджрд▓рддрд╛ рд╣реВрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдореВрд░реНрдд рдХреЗрд╡рд▓ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдореИрдВ рдирд┐рдпрдВрддреНрд░рдХ рдкрджреНрдзрддрд┐ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдПрдХ рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рдЖрдЗрдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рджреЗрдЦреЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:
[ValidateInput(false)] [HttpPost] public ActionResult Comment(CommentInput input, int id, Guid key) { var post = RavenSession .Include<Post>(x => x.CommentsId) .Load(id); if (post == null || post.IsPublicPost(key) == false) return HttpNotFound(); var comments = RavenSession.Load<PostComments>(post.CommentsId); if (comments == null) return HttpNotFound(); var commenter = RavenSession.GetCommenter(input.CommenterKey); if (commenter == null) { input.CommenterKey = Guid.NewGuid(); } ValidateCommentsAllowed(post, comments); ValidateCaptcha(input, commenter); if (ModelState.IsValid == false) return PostingCommentFailed(post, input, key); TaskExecutor.ExcuteLater(new AddCommentTask(input, Request.MapTo<AddCommentTask.RequestValues>() ,id)); CommenterUtil.SetCommenterCookie(Response, input.CommenterKey.MapTo<string>()); return PostingCommentSucceeded(post, input); }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рдиреНрдпрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрд╕рд▓реА рдХрд╛рдо
AddCommentTask
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдХрдорд╛рдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ MVC, рд╕рддреНрдпрд╛рдкрди, ActionResult рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред
рд╣рдордиреЗ рдЕрдкрдиреЗ рдЕрдореВрд░реНрдд (
AddCommentTask
рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ) рд╕реЗ рдХреБрдЫ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рдмрдирд╛рдИ рд╣реИрдВ рдФрд░ рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдо рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░реАрдХреНрд╖рдг рд░рдгрдиреАрддрд┐рдпрд╛рдБрдЖрдЬ рдореЗрд░реА рдкрд░реАрдХреНрд╖рдг рд░рдгрдиреАрддрд┐ рд╣реИ:
- рдкреГрдердХ рдШрдЯрдХреЛрдВ (рдбреЛрдореЗрди рдореЙрдбрд▓ рдФрд░ рдЕрдиреНрдп рдкрд╣рд▓реЗ рд╕реЗ рдкреГрдердХ рд╡рд░реНрдЧ) рдХреА рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг
- рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд╕рдм рдХреБрдЫ
рдореИрдВ рдСрдЯреЛ-рдореЛрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рд╕реНрдЯрдм рдШрдЯрдХреЛрдВ рдореЗрдВ рд░рдЦрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЕрдиреНрдпрдерд╛, рдпрд╣ рддрд░реНрдХ рдХреЛ рдЧрд╣рд░реЗ рдФрд░ рдЧрд╣рд░реЗ рдзрдХреЗрд▓рдиреЗ рдХреА рд░рдгрдиреАрддрд┐ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рдбреЗрдЯрд╛рдмреЗрд╕ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдзреАрдореЗ рд╣реЛрдВрдЧреЗред рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдореБрдЭреЗ рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╣реЛрддреА рд╣реИред рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдЯреВрдЯреЗ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рд╕реНрдЯрдм рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдореЗрд░реЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ, рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (
рд╕реАрдо, рд╕реАрдо - рд▓рдЧрднрдЧред рдПрдбред ) рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
рд░реИрдХреЛрдиреЛрдмреНрд▓реЙрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ
, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд░реЗрд╡реЗрдирдбреА рд╕реНрдЯреЛрд░реЗрдЬ рдЗрдВрдЬрди рдХреЛ рдЗрди-рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рд╕реЗ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдмрд╣реБрдд рддреЗрдЬ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА - рдореИрдВ рдПрдХ рднрдВрдбрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рдирд╣реАрдВ рд╣реВрдВред рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдХреЗрд╡рд▓ рдХреБрдЫ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрдВрдбрд╛рд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреА рд╣реИред рдпрд╣ рдПрдХ рдРрд╕реА рдЬрдЧрд╣ рдкрд░ рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрдореВрд░реНрдд рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдиреБрд░реЛрдз рд╡рд╕реНрддреБ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдирд╛)ред
рдЕрдореВрд░реНрддрддрд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЧрд┐рд░рдиреЗ рджреЗрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рдореЗрд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдирд╣реАрдВ рд╣реИрдВ - рд╡реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдиреЗ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рд░рдЦрд╛ рд╣реИ)ред
рдЬрд┐рдореА рдмреЛрдЧрд░реНрдб рд╣реЗрдбрд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддреБрдХрд╛рд░ рд╣реИ, рдЬреЛ рдСрдЯреЛрдореИрдкрд░ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдПрдХреНрд╢рди рдореЗрдВ ASP.NET MVC рдХреЗ рд╕рд╣-рд▓реЗрдЦрдХ рд╣реИрдВред рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдореЗрдВ, рд╡рд╣ DDD, CQRS, рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред