<commit_before><h2>Contents</h2>
<ul>
    <li><a href="#Introduction">Introduction to the problem</a></li>
    <li><a href="#WhatIsAbp">What is ASP.NET Boilerplate?</a></li>
    <li><a href="#ArticleHistory">Article history</a></li>
    <li><a href="#References">References</a></li>
</ul>

<h2 id="Introduction">Introduction to the problem</h2>

<p>
    <strong>DRY </strong>- Don&#39;t Repeat Yourself! is one of the main ideas of a good developer while developing software. We&#39;re trying to implement it from simple methods to classes and modules. What about developing a new web based application? We, software developers, have similar needs when developing enterprise web applications.
</p>
<p>
    <strong>Enterprise web applications</strong> need login pages, user/role management infrastructure, user/application setting management, localization and so on. Also, a high quality and large scale software implements <strong>best practices</strong> such as Layered Architecture, Domain Driven Design (DDD), dependency injection (DI). Also, we use <strong>tools</strong> for Object-Releational Mapping (ORM), database migrations, logging... etc. When it comes to the <strong>user interface</strong> (UI), it&#39;s not much different.
</p>
<p>
    Starting a new enterprise web application is a hard work. Since all applications need some common tasks, we&#39;re repeating ourselves. Many companies are developing their own <strong>frameworks/libraries</strong> for such common tasks to do not re-develop same things. Others are <strong>copying</strong> some parts of existing applications and preparing <strong>a start point</strong> for their new application. First approach is pretty good if your company is big enough and has time to develop such a framework.
</p>
<p>
    As a software architect, I also developed such a framework im my company. But, there is some point it feels me bad: Many company repeats same tasks. What if we can <strong>share more, repeat less</strong>? What if DRY principle is implemented <strong>universally</strong> instead of per company? It sounds utopian, but I think there may be a starting point for that!
</p>

<h2 id="WhatIsAbp">What is ASP.NET Boilerplate?</h2>
<p>ASP.NET Boilerplate is a starting point for new web applications using <strong>best practices </strong>and <strong>most popular tools</strong>. It&#39;s aimed to be a solid <strong>model</strong>, a general-purpose <strong>framework</strong> and a project <strong>template</strong>. What it does?</p>
<ul>
    <li>Server side<ul>
        <li>Based on <strong>ASP.NET MVC </strong>and <strong>Web API</strong>.</li>
        <li>Implements <strong>Domain Driven Design </strong>(Entities, Repositories, Domain Services, Application Services, DTOs, Unif Of Work... and so on)</li>
        <li>Implements <strong>Layered Architecture </strong>(Domain, Application, Presentation and Infrastructure Layers).</li>
        <li>Provides an infrastructure to develop reusable and composable <strong>modules </strong>for large projects.</li>
        <li>Uses most popular <strong>frameworks/libraries </strong>as (probably) you&#39;re already using.</li>
        <li>Provides an infrastructure for and make it easy to use <strong>Dependency Injection </strong>(uses Castle Windsor as DI container).</li>
        <li>Provides a strict model and base classes to use <strong>Object-Releational Mapping </strong>easily (uses NHibernate, can work with many DBMS).</li>
        <li>Implements <strong>database migrations </strong>(uses FluentMigrator).</li>
        <li>Includes <strong>authentication </strong>and <strong>role-based authorization </strong>infrastructure (Implements ASP.NET Identity Framework).</li>
        <li>Includes a simple and flexible <strong>localization </strong>system.</li>
        <li>Includes <strong>EventBus </strong>for server-side global domain events.</li>
        <li>Includes a <strong>setting </strong>system (application/user level).</li>
        <li>Manages <strong>exception handling</strong> and <strong>validation</strong>.</li>
        <li>Provides <strong>base classes </strong>to implement some common tasks.</li>
        <li>Uses <strong>conventions </strong>over configurations.</li>
        </ul>
    </li>
    <li>Client side<ul>
        <li>Provides two <strong>project templates</strong>. One for <strong>Single-Page Applications </strong>using <strong>Durandaljs</strong>, other one is a <strong>Multi-Page Application</strong>. Both templates uses Twitter <strong>Bootstrap</strong>.</li>
        <li>Includes <strong>unique APIs </strong>for some sommon tasks: showing alerts &amp; notifications, blocking UI, makine AJAX requests.</li>
        </ul>
    </li>
</ul>

<h2 id="ArticleHistory">Article History </h2>

<ul>
    <li><strong>05.05.2014</strong>: First publish of the article.</li>
</ul>

<h2 id="References">References</h2>

<p>[1] ASP.NET Boilerplate official website: <a href="http://www.aspnetboilerplate.com">http://www.aspnetboilerplate.com</a></p><commit_msg>Article updated<commit_after><h2>Contents</h2>
<ul>
    <li><a href="#Introduction">Introduction to the problem</a></li>
    <li><a href="#WhatIsAbp">What is ASP.NET Boilerplate?</a></li>
    <li>Getting started with a simple application<ul>
        <li>Creating a new web application</li>
        <li>Creating database &amp; migrations</li>
        <li>Domain Layer</li>
        <li>Infrastructure Layer</li>
        <li>Application Layer</li>
        <li>Presentation Layer</li>
        </ul>
    </li>
    <li>ABP in details<ul>
        <li>DB migrations</li>
        <li>Module System</li>
        <li>Dependency Injection</li>
        <li>Entities &amp; Mapping</li>
        <li>Repositories</li>
        <li>Unit Of Work</li>
        <li>Domain Services</li>
        <li>Event Bus</li>
        <li>Localization</li>
        <li>Application Services &amp; DTOs</li>
        <li>Dynamic Web API</li>
        </ul>
    </li>
    <li>More<ul>
        <li>Single Page Applications</li>
        <li>Core Module</li>
        </ul>
    </li>
    <li><a href="#ArticleHistory">Article history</a></li>
    <li><a href="#References">References</a></li>
</ul>

<h2 id="Introduction">Introduction to the problem</h2>

<p>
    <strong>DRY </strong>- Don&#39;t Repeat Yourself! is one of the main ideas of a good developer while developing a software. We&#39;re trying to implement it from simple methods to classes and modules. What about developing a new web based application? We, software developers, have similar needs when developing enterprise web applications.
</p>
<p>
    <strong>Enterprise web applications</strong> need login pages, user/role management infrastructure, user/application setting management, localization and so on. Also, a high quality and large scale software implements <strong>best practices</strong> such as Layered Architecture, Domain Driven Design (DDD), dependency injection (DI). Also, we use <strong>tools</strong> for Object-Releational Mapping (ORM), database migrations, logging... etc. When it comes to the <strong>user interface</strong> (UI), it&#39;s not much different.
</p>
<p>
    Starting a new enterprise web application is a hard work. Since all applications need some common tasks, we&#39;re repeating ourselves. Many companies are developing their own <strong>frameworks/libraries</strong> for such common tasks to do not re-develop same things. Others are <strong>copying</strong> some parts of existing applications and preparing <strong>a start point</strong> for their new application. First approach is pretty good if your company is big enough and has time to develop such a framework.
</p>
<p>
    As a software architect, I also developed such a framework im my company. But, there is some point it feels me bad: Many company repeats same tasks. What if we can <strong>share more, repeat less</strong>? What if DRY principle is implemented <strong>universally</strong> instead of per company? It sounds utopian, but I think there may be a starting point for that!
</p>

<h2 id="WhatIsAbp">What is ASP.NET Boilerplate?</h2>
<p>ASP.NET Boilerplate is a starting point for new web applications using <strong>best practices </strong>and <strong>most popular tools</strong>. It&#39;s aimed to be a solid <strong>model</strong>, a general-purpose <strong>framework</strong> and a project <strong>template</strong>. What it does?</p>
<ul>
    <li>Server side<ul>
        <li>Based on <strong>ASP.NET MVC </strong>and <strong>Web API</strong>.</li>
        <li>Implements <strong>Domain Driven Design </strong>(Entities, Repositories, Domain Services, Application Services, DTOs, Unif Of Work... and so on)</li>
        <li>Implements <strong>Layered Architecture </strong>(Domain, Application, Presentation and Infrastructure Layers).</li>
        <li>Provides an infrastructure to develop reusable and composable <strong>modules </strong>for large projects.</li>
        <li>Uses most popular <strong>frameworks/libraries </strong>as (probably) you&#39;re already using.</li>
        <li>Provides an infrastructure and make it easy to use <strong>Dependency Injection </strong>(uses Castle Windsor as DI container).</li>
        <li>Provides a strict model and base classes to use <strong>Object-Releational Mapping </strong>easily (uses NHibernate, can work with many DBMS).</li>
        <li>Implements <strong>database migrations </strong>(uses FluentMigrator).</li>
        <li>Includes <strong>authentication </strong>and <strong>role-based authorization </strong>infrastructure (Implements ASP.NET Identity Framework).</li>
        <li>Includes a simple and flexible <strong>localization </strong>system.</li>
        <li>Includes <strong>EventBus </strong>for server-side global domain events.</li>
        <li>Includes a <strong>setting </strong>system (application/user level).</li>
        <li>Manages <strong>exception handling</strong> and <strong>validation</strong>.</li>
        <li>Provides <strong>base classes </strong>to implement some common tasks.</li>
        <li>Uses <strong>conventions </strong>over configurations.</li>
        </ul>
    </li>
    <li>Client side<ul>
        <li>Provides two <strong>project templates</strong>. One for <strong>Single-Page Applications </strong>using <strong>Durandaljs</strong>, other one is a <strong>Multi-Page Application</strong>. Both templates uses Twitter <strong>Bootstrap</strong>.</li>
        <li>Includes <strong>unique APIs </strong>for some sommon tasks: showing alerts &amp; notifications, blocking UI, making AJAX requests.</li>
        </ul>
    </li>
</ul>

<h2 id="ArticleHistory">Article History </h2>

<ul>
    <li><strong>05.05.2014</strong>: First publish of the article.</li>
</ul>

<h2 id="References">References</h2>

<p>[1] ASP.NET Boilerplate official website: <a href="http://www.aspnetboilerplate.com">http://www.aspnetboilerplate.com</a></p>
{'fraction_non_alphanumeric': 0.1255272327159362, 'fraction_numerical': 0.005684944067485788, 'mean_word_length': 4.263996138996139, 'pattern_counts': {'":': 0, '<': 393, '<?xml version=': 0, '>': 393, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3008757', 'n_tokens_mistral': 3157, 'n_tokens_neox': 3035, 'n_words': 1113}