This commit is contained in:
TheDoubleH 2022-02-25 16:46:16 +00:00
parent a35732a260
commit a527835756
201 changed files with 598 additions and 1100 deletions

View file

@ -25,14 +25,14 @@ Context An app can have interfaces. It makes it possible for other apps to exten
Like in this example, we have an interface, to implement different ways for getting weights from scales:">
<meta property="og:type" content="article">
<meta property="og:url" content="https://alguidelines.dev/docs/patterns/event-bridge-pattern/"><meta property="og:image" content="https://alguidelines.dev/images/og-image-fission.png"><meta property="article:section" content="docs">
<meta property="article:modified_time" content="2022-02-24T14:45:35+01:00"><meta property="og:site_name" content="alguidelines.dev - Business Central Design Patterns">
<meta property="article:modified_time" content="2022-02-24T15:36:06-08:00"><meta property="og:site_name" content="alguidelines.dev - Business Central Design Patterns">
<meta itemprop=name content="Event Bridge">
<meta itemprop=description content="Created by waldo & Arend-Jan Kauffmann, Described by waldo
Abstract In the world of interfaces, it is important to preserve (certain) events over multiple implementation of the interface.
Context An app can have interfaces. It makes it possible for other apps to extend/change the implementations of a certain part of the business logic.
Like in this example, we have an interface, to implement different ways for getting weights from scales:">
<meta itemprop=dateModified content="2022-02-24T14:45:35+01:00">
<meta itemprop=wordCount content="306"><meta itemprop=image content="https://alguidelines.dev/images/og-image-fission.png">
<meta itemprop=dateModified content="2022-02-24T15:36:06-08:00">
<meta itemprop=wordCount content="299"><meta itemprop=image content="https://alguidelines.dev/images/og-image-fission.png">
<meta itemprop=keywords content="AL,Interface,Extendability,"><meta name=twitter:card content="summary_large_image">
<meta name=twitter:image content="https://alguidelines.dev/images/og-image-fission.png">
<meta name=twitter:title content="Event Bridge">
@ -69,7 +69,7 @@ Like in this example, we have an interface, to implement different ways for gett
</li>
</ul>
</div>
<div class="navbar-nav d-none d-lg-block"><input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.2b0c36478a8660f3dec37e0c539508bc.json data-offline-search-base-href=/ data-offline-search-max-results=10>
<div class="navbar-nav d-none d-lg-block"><input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.446cc05ee9bff165bd123d203082adb7.json data-offline-search-base-href=/ data-offline-search-max-results=10>
</div>
</nav>
</header>
@ -80,7 +80,7 @@ Like in this example, we have an interface, to implement different ways for gett
<div id=td-sidebar-menu class=td-sidebar__inner>
<div id=content-mobile>
<form class="td-sidebar__search d-flex align-items-center">
<input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.2b0c36478a8660f3dec37e0c539508bc.json data-offline-search-base-href=/ data-offline-search-max-results=10>
<input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.446cc05ee9bff165bd123d203082adb7.json data-offline-search-base-href=/ data-offline-search-max-results=10>
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation">
</button>
</form>
@ -514,7 +514,6 @@ Like in this example, we have an interface, to implement different ways for gett
<li><a href=#description>Description</a></li>
<li><a href=#benefits>Benefits</a></li>
<li><a href=#when-not-to-use>When not to use</a></li>
<li><a href=#discussions>Discussions</a></li>
</ul>
</nav></div>
<div class="taxonomy taxonomy-terms-cloud taxo-tags">
@ -647,10 +646,8 @@ When a new implementation is created, we need to make sure that these events are
<p>The naming convention (both starting with &ldquo;IScale&rdquo;) also makes it very easy to find that corresponding events for the interface.</p>
<h2 id=when-not-to-use>When not to use</h2>
<p>Obviously, the events should be carefully considered: only the events that make sense to &ldquo;share&rdquo; over all implementations, need this approach.</p>
<h2 id=discussions>Discussions</h2>
<p>You can discuss this pattern <a href=https://github.com/microsoft/alguidelines/discussions/66>here</a></p>
<div class="text-muted mt-5 pt-3 border-top">
Last modified February 24, 2022: <a href=https://github.com/microsoft/alguidelines/commit/5ee0436639455a35835c5ce88241d3fad662ee06>Added tags & categories + cleanup (5ee04366)</a>
Last modified February 24, 2022: <a href=https://github.com/microsoft/alguidelines/commit/fb17dc9640ceef53d1f3b8bbf9e9791ef92fabbc>Removed Discussion Links. Using new Theme solution. (fb17dc96)</a>
</div>
</div>
</main>

View file

@ -24,13 +24,13 @@ Abstract The intent of this pattern is to provide a unified API to a single or a
Decoupling Encapsulation Readability Testability Maintainability Context Whenever you want to write an isolated piece of business logic, from now on referred to as subsystem, this pattern should be applicable.">
<meta property="og:type" content="article">
<meta property="og:url" content="https://alguidelines.dev/docs/patterns/facade-pattern/"><meta property="og:image" content="https://alguidelines.dev/images/og-image-fission.png"><meta property="article:section" content="docs">
<meta property="article:modified_time" content="2022-02-24T14:45:35+01:00"><meta property="og:site_name" content="alguidelines.dev - Business Central Design Patterns">
<meta property="article:modified_time" content="2022-02-24T15:36:06-08:00"><meta property="og:site_name" content="alguidelines.dev - Business Central Design Patterns">
<meta itemprop=name content="Façade">
<meta itemprop=description content="Created by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (Gang of Four), Described by Jesper Schulz-Wedde (Microsoft)
Abstract The intent of this pattern is to provide a unified API to a single or a collection of potentially complex subsystems. If you apply this pattern as a general pattern, you will ensure improved:
Decoupling Encapsulation Readability Testability Maintainability Context Whenever you want to write an isolated piece of business logic, from now on referred to as subsystem, this pattern should be applicable.">
<meta itemprop=dateModified content="2022-02-24T14:45:35+01:00">
<meta itemprop=wordCount content="1328"><meta itemprop=image content="https://alguidelines.dev/images/og-image-fission.png">
<meta itemprop=dateModified content="2022-02-24T15:36:06-08:00">
<meta itemprop=wordCount content="1321"><meta itemprop=image content="https://alguidelines.dev/images/og-image-fission.png">
<meta itemprop=keywords content="AL,Decoupling,Readability,Testability,Extendability,"><meta name=twitter:card content="summary_large_image">
<meta name=twitter:image content="https://alguidelines.dev/images/og-image-fission.png">
<meta name=twitter:title content="Façade">
@ -66,7 +66,7 @@ Abstract The intent of this pattern is to provide a unified API to a single or a
</li>
</ul>
</div>
<div class="navbar-nav d-none d-lg-block"><input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.2b0c36478a8660f3dec37e0c539508bc.json data-offline-search-base-href=/ data-offline-search-max-results=10>
<div class="navbar-nav d-none d-lg-block"><input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.446cc05ee9bff165bd123d203082adb7.json data-offline-search-base-href=/ data-offline-search-max-results=10>
</div>
</nav>
</header>
@ -77,7 +77,7 @@ Abstract The intent of this pattern is to provide a unified API to a single or a
<div id=td-sidebar-menu class=td-sidebar__inner>
<div id=content-mobile>
<form class="td-sidebar__search d-flex align-items-center">
<input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.2b0c36478a8660f3dec37e0c539508bc.json data-offline-search-base-href=/ data-offline-search-max-results=10>
<input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.446cc05ee9bff165bd123d203082adb7.json data-offline-search-base-href=/ data-offline-search-max-results=10>
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation">
</button>
</form>
@ -527,7 +527,6 @@ Abstract The intent of this pattern is to provide a unified API to a single or a
<li><a href=#when-not-to-use>When not to use</a></li>
<li><a href=#snippets>Snippets</a></li>
<li><a href=#list-of-references>List of references</a></li>
<li><a href=#discussions>Discussions</a></li>
</ul>
</nav></div>
<div class="taxonomy taxonomy-terms-cloud taxo-tags">
@ -716,10 +715,8 @@ In Business Central, all modules in the System Application are subsystems. Examp
<p><a href=https://archive.org/details/designpatternsel00gamm/page/185>Design Patterns: Elements of Reusable Object-Oriented Software</a>. Addison Wesley. pp. 185ff. ISBN 0-201-63361-2.</p>
<p>It is also a key pattern in the design of our system application modules, which is described here:</p>
<p><a href=https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-blueprint>Module Architecture</a></p>
<h2 id=discussions>Discussions</h2>
<p>You can discuss this pattern <a href=https://github.com/microsoft/alguidelines/discussions/42>here</a></p>
<div class="text-muted mt-5 pt-3 border-top">
Last modified February 24, 2022: <a href=https://github.com/microsoft/alguidelines/commit/5ee0436639455a35835c5ce88241d3fad662ee06>Added tags & categories + cleanup (5ee04366)</a>
Last modified February 24, 2022: <a href=https://github.com/microsoft/alguidelines/commit/fb17dc9640ceef53d1f3b8bbf9e9791ef92fabbc>Removed Discussion Links. Using new Theme solution. (fb17dc96)</a>
</div>
</div>
</main>

View file

@ -24,13 +24,13 @@ Abstract The goal of this pattern is to facilitate a lot of things in one single
Extensibility Decoupling Readability Testability Encapsulation Context Whenever you have to write an isolated piece of business logic, this pattern should be applicable.">
<meta property="og:type" content="article">
<meta property="og:url" content="https://alguidelines.dev/docs/patterns/generic-method-pattern/"><meta property="og:image" content="https://alguidelines.dev/images/og-image-fission.png"><meta property="article:section" content="docs">
<meta property="article:modified_time" content="2022-02-24T14:45:35+01:00"><meta property="og:site_name" content="alguidelines.dev - Business Central Design Patterns">
<meta property="article:modified_time" content="2022-02-24T15:36:06-08:00"><meta property="og:site_name" content="alguidelines.dev - Business Central Design Patterns">
<meta itemprop=name content="Generic Method">
<meta itemprop=description content="Created by Gary Winter (Cloud Ready Software), Described by waldo (iFacto Business Solutions | Dynex)
Abstract The goal of this pattern is to facilitate a lot of things in one single awesome way of writing code. If you apply this pattern as a general pattern, you&rsquo;ll implement:
Extensibility Decoupling Readability Testability Encapsulation Context Whenever you have to write an isolated piece of business logic, this pattern should be applicable.">
<meta itemprop=dateModified content="2022-02-24T14:45:35+01:00">
<meta itemprop=wordCount content="1729"><meta itemprop=image content="https://alguidelines.dev/images/og-image-fission.png">
<meta itemprop=dateModified content="2022-02-24T15:36:06-08:00">
<meta itemprop=wordCount content="1722"><meta itemprop=image content="https://alguidelines.dev/images/og-image-fission.png">
<meta itemprop=keywords content="AL,Decoupling,Readability,Testability,Extendability,"><meta name=twitter:card content="summary_large_image">
<meta name=twitter:image content="https://alguidelines.dev/images/og-image-fission.png">
<meta name=twitter:title content="Generic Method">
@ -66,7 +66,7 @@ Abstract The goal of this pattern is to facilitate a lot of things in one single
</li>
</ul>
</div>
<div class="navbar-nav d-none d-lg-block"><input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.2b0c36478a8660f3dec37e0c539508bc.json data-offline-search-base-href=/ data-offline-search-max-results=10>
<div class="navbar-nav d-none d-lg-block"><input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.446cc05ee9bff165bd123d203082adb7.json data-offline-search-base-href=/ data-offline-search-max-results=10>
</div>
</nav>
</header>
@ -77,7 +77,7 @@ Abstract The goal of this pattern is to facilitate a lot of things in one single
<div id=td-sidebar-menu class=td-sidebar__inner>
<div id=content-mobile>
<form class="td-sidebar__search d-flex align-items-center">
<input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.2b0c36478a8660f3dec37e0c539508bc.json data-offline-search-base-href=/ data-offline-search-max-results=10>
<input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.446cc05ee9bff165bd123d203082adb7.json data-offline-search-base-href=/ data-offline-search-max-results=10>
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation">
</button>
</form>
@ -527,7 +527,6 @@ Abstract The goal of this pattern is to facilitate a lot of things in one single
<li><a href=#when-not-to-use>When not to use</a></li>
<li><a href=#snippets>Snippets</a></li>
<li><a href=#list-of-references>List of references</a></li>
<li><a href=#discussions>Discussions</a></li>
</ul>
</nav></div>
<div class="taxonomy taxonomy-terms-cloud taxo-tags">
@ -852,10 +851,8 @@ And because of that, it so much more maintainable, upgradable, readable, .. . On
<div style=position:relative;padding-bottom:56.25%;height:0;overflow:hidden>
<iframe src=https://www.youtube.com/embed/CWpaD9RUa6U style=position:absolute;top:0;left:0;width:100%;height:100%;border:0 allowfullscreen title="YouTube Video"></iframe>
</div>
<h2 id=discussions>Discussions</h2>
<p>You can discuss this pattern <a href=https://github.com/microsoft/alguidelines/discussions/41>here</a></p>
<div class="text-muted mt-5 pt-3 border-top">
Last modified February 24, 2022: <a href=https://github.com/microsoft/alguidelines/commit/5ee0436639455a35835c5ce88241d3fad662ee06>Added tags & categories + cleanup (5ee04366)</a>
Last modified February 24, 2022: <a href=https://github.com/microsoft/alguidelines/commit/fb17dc9640ceef53d1f3b8bbf9e9791ef92fabbc>Removed Discussion Links. Using new Theme solution. (fb17dc96)</a>
</div>
</div>
</main>

View file

@ -59,7 +59,7 @@
</li>
</ul>
</div>
<div class="navbar-nav d-none d-lg-block"><input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.2b0c36478a8660f3dec37e0c539508bc.json data-offline-search-base-href=/ data-offline-search-max-results=10>
<div class="navbar-nav d-none d-lg-block"><input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.446cc05ee9bff165bd123d203082adb7.json data-offline-search-base-href=/ data-offline-search-max-results=10>
</div>
</nav>
</header>
@ -70,7 +70,7 @@
<div id=td-sidebar-menu class=td-sidebar__inner>
<div id=content-mobile>
<form class="td-sidebar__search d-flex align-items-center">
<input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.2b0c36478a8660f3dec37e0c539508bc.json data-offline-search-base-href=/ data-offline-search-max-results=10>
<input type=search class="form-control td-search-input" placeholder="&#xf002; Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.446cc05ee9bff165bd123d203082adb7.json data-offline-search-base-href=/ data-offline-search-max-results=10>
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation">
</button>
</form>

View file

@ -75,9 +75,7 @@ When a new implementation is created, we need to make sure that these events are
&lt;p>This new codeunit, with public events, makes the events accessible from all places, including new apps that are dependent from this app, and wants to extend the&lt;/p>
&lt;p>The naming convention (both starting with &amp;ldquo;IScale&amp;rdquo;) also makes it very easy to find that corresponding events for the interface.&lt;/p>
&lt;h2 id="when-not-to-use">When not to use&lt;/h2>
&lt;p>Obviously, the events should be carefully considered: only the events that make sense to &amp;ldquo;share&amp;rdquo; over all implementations, need this approach.&lt;/p>
&lt;h2 id="discussions">Discussions&lt;/h2>
&lt;p>You can discuss this pattern &lt;a href="https://github.com/microsoft/alguidelines/discussions/66">here&lt;/a>&lt;/p></description></item><item><title>Docs: Façade</title><link>https://alguidelines.dev/docs/patterns/facade-pattern/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/patterns/facade-pattern/</guid><description>
&lt;p>Obviously, the events should be carefully considered: only the events that make sense to &amp;ldquo;share&amp;rdquo; over all implementations, need this approach.&lt;/p></description></item><item><title>Docs: Façade</title><link>https://alguidelines.dev/docs/patterns/facade-pattern/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/patterns/facade-pattern/</guid><description>
&lt;p>&lt;em>Created by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (Gang of Four), Described by Jesper Schulz-Wedde (Microsoft)&lt;/em>&lt;/p>
&lt;h2 id="abstract">Abstract&lt;/h2>
&lt;p>The intent of this pattern is to provide a unified API to a single or a collection of potentially complex subsystems. If you apply this pattern as a general pattern, you will ensure improved:&lt;/p>
@ -208,9 +206,7 @@ In Business Central, all modules in the System Application are subsystems. Examp
&lt;p>This is one of the most commonly used and discussed, initially described here:&lt;/p>
&lt;p>&lt;a href="https://archive.org/details/designpatternsel00gamm/page/185">Design Patterns: Elements of Reusable Object-Oriented Software&lt;/a>. Addison Wesley. pp. 185ff. ISBN 0-201-63361-2.&lt;/p>
&lt;p>It is also a key pattern in the design of our system application modules, which is described here:&lt;/p>
&lt;p>&lt;a href="https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-blueprint">Module Architecture&lt;/a>&lt;/p>
&lt;h2 id="discussions">Discussions&lt;/h2>
&lt;p>You can discuss this pattern &lt;a href="https://github.com/microsoft/alguidelines/discussions/42">here&lt;/a>&lt;/p></description></item><item><title>Docs: Generic Method</title><link>https://alguidelines.dev/docs/patterns/generic-method-pattern/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/patterns/generic-method-pattern/</guid><description>
&lt;p>&lt;a href="https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-blueprint">Module Architecture&lt;/a>&lt;/p></description></item><item><title>Docs: Generic Method</title><link>https://alguidelines.dev/docs/patterns/generic-method-pattern/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alguidelines.dev/docs/patterns/generic-method-pattern/</guid><description>
&lt;p>&lt;em>Created by Gary Winter (Cloud Ready Software), Described by waldo (iFacto Business Solutions | Dynex)&lt;/em>&lt;/p>
&lt;h2 id="abstract">Abstract&lt;/h2>
&lt;p>The goal of this pattern is to facilitate a lot of things in one single awesome way of writing code. If you apply this pattern as a general pattern, you&amp;rsquo;ll implement:&lt;/p>
@ -477,6 +473,4 @@ And because of that, it so much more maintainable, upgradable, readable, .. . On
&lt;p>There have been a number of occasions where people have been sharing this pattern. Here is one:&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/CWpaD9RUa6U" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;h2 id="discussions">Discussions&lt;/h2>
&lt;p>You can discuss this pattern &lt;a href="https://github.com/microsoft/alguidelines/discussions/41">here&lt;/a>&lt;/p></description></item></channel></rss>
&lt;/div></description></item></channel></rss>