<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: LFC</title>
    <description>The latest articles on DEV Community by LFC (@luisfernando_ch).</description>
    <link>https://dev.to/luisfernando_ch</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F204764%2F5009f488-ed2a-48cb-8e14-4f777496221a.jpg</url>
      <title>DEV Community: LFC</title>
      <link>https://dev.to/luisfernando_ch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/luisfernando_ch"/>
    <language>en</language>
    <item>
      <title>Quick approach: Anti-corruption layer pattern</title>
      <dc:creator>LFC</dc:creator>
      <pubDate>Wed, 24 Aug 2022 21:02:00 +0000</pubDate>
      <link>https://dev.to/luisfernando_ch/quick-approach-anti-corruption-layer-pattern-1m19</link>
      <guid>https://dev.to/luisfernando_ch/quick-approach-anti-corruption-layer-pattern-1m19</guid>
      <description>&lt;p&gt;The anti-corruption layer pattern implements a facade or adapter between different systems with different semantics. The main purpose is to translate the request from one system to another, trying to reduce dependencies and limitations.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Create an isolating layer to provide clients with functionality in terms of their own domain model. The layer talks to the other system through its existing interface, requiring little or no modification to the other system. Internally the layer translates in both directions as necessary between the two models"&lt;/em&gt;&lt;br&gt;
Eric Evans’s Domain Driven Design book&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Several companies dedicate their efforts to solving specific problems under specific mechanisms, technologies and architectures, forgetting a potential unification or communication of those systems in the future.&lt;/p&gt;

&lt;p&gt;Many of these scenarios are present when trying to interface a new or recent system with legacy components, causing compatibility issues. In these cases, the priority must be to respect the restrictions of the system and not include bad practices in our code in order to force communication between those involved.&lt;/p&gt;

&lt;p&gt;An ally to solve this problem is to implement an anti-corruption layer, which serves as an adapter and translator between the requests that the systems or subsystems involved make.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z_gvBPcA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b2y1539nmjtteofrqjpc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z_gvBPcA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b2y1539nmjtteofrqjpc.png" alt="Image description" width="880" height="665"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you do not have homogeneous systems, you can use this pattern in order to avoid mixing protocols and communication mechanisms between different architectures and subsystems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A standard interface to expose functionality.&lt;/li&gt;
&lt;li&gt;Evolve implementations without sacrificing compatibility or efficiency.&lt;/li&gt;
&lt;li&gt;Discovering services may be easier through a middle layer.&lt;/li&gt;
&lt;li&gt;Centralized error handling in the middle layer.&lt;/li&gt;
&lt;li&gt;Move and unify communication, monitoring, security, and interoperability responsibilities to a layer that does not interfere with legacy or new systems.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>development</category>
      <category>software</category>
      <category>programming</category>
    </item>
    <item>
      <title>Clarity and Communication, fundamental techniques in Software Architecture</title>
      <dc:creator>LFC</dc:creator>
      <pubDate>Mon, 11 May 2020 05:32:36 +0000</pubDate>
      <link>https://dev.to/luisfernando_ch/clarity-and-communication-fundamental-techniques-in-software-architecture-1ea1</link>
      <guid>https://dev.to/luisfernando_ch/clarity-and-communication-fundamental-techniques-in-software-architecture-1ea1</guid>
      <description>&lt;p&gt;&lt;em&gt;Technical decisions, project goals, specifications, and restrictions frequently are communicated in large Microsoft Word documents, extensive paragraphs, and many tables with change control.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I regard it is not the best approach to share knowledge, decisions, and establish a convenient work environment around a project and their members, I have two reasons that support my thoughts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No one on your team is going to read and memorize a 50-page architecture document.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We are living in an environment that demands cross participation or cooperation instead of accepting a lot of instructions ruled by the architects or technical leaders.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;According to that, I recommend a few ideas to be agile, have effective communication, leadership, and simplicity in complex scenarios.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools to transmit thoughts&lt;/strong&gt;&lt;br&gt;
Use diagram modelers in order to communicate your ideas and workflows. Often this method promotes a better scope understanding and allows identifying several restrictions at first sight.&lt;br&gt;
Options: Visio or Enterprise Architect, and so forth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Post-it notes or whiteboarding&lt;/strong&gt;&lt;br&gt;
Architects, leaders, developers into a room in order to draw, divulge, and share technical considerations. At the end of the session, you could want to snap some pictures and share them with the team in order to provide valuable stuff for reviews or future discussions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expose details about architectural decisions&lt;/strong&gt;&lt;br&gt;
After taking all the conclusions, concerns, concepts, or opinions, it is time to expose the framework or approach, involve the technical people in the architecture process, and validate if we are in a good shape regarding the needs of the project. A collaborative environment will improve communication inside the team.&lt;/p&gt;

&lt;p&gt;Repeat the process. Architectures do not have to be rigid.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="https://medium.com/@luisfernando_ch/clarity-and-communication-fundamentals-techniques-in-software-architecture-1e72f81144f7" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--38teAqur--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/fit/c/96/96/1%2AJI2uvMpBQKukeYQh5u3jkA%402x.jpeg" alt="Luis Chavarriaga"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://medium.com/@luisfernando_ch/clarity-and-communication-fundamentals-techniques-in-software-architecture-1e72f81144f7" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Clarity and Communication, fundamental techniques in Software Architecture&lt;/h2&gt;
      &lt;h3&gt;Luis Chavarriaga ・ &lt;time&gt;May 10, 2020&lt;/time&gt; ・ 2 min read
      &lt;div class="ltag__link__servicename"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_EkM13RG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/medium_icon-2c57b3ec653e92a3d6207e708f1e4987099fc69342e556aaf9f035b1968b3f26.svg" alt="Medium Logo"&gt;
        Medium
      &lt;/div&gt;
    &lt;/h3&gt;
&lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>architecture</category>
      <category>development</category>
      <category>software</category>
      <category>programming</category>
    </item>
    <item>
      <title>Query to get Primary Key &amp; Foreign Key columns</title>
      <dc:creator>LFC</dc:creator>
      <pubDate>Tue, 24 Sep 2019 19:42:28 +0000</pubDate>
      <link>https://dev.to/luisfernando_ch/query-to-get-primary-key-foreign-key-columns-4790</link>
      <guid>https://dev.to/luisfernando_ch/query-to-get-primary-key-foreign-key-columns-4790</guid>
      <description>&lt;p&gt;I want to share this query for SQL Server to get PK, FK, and Data Type information from a DB Table.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Enjoy!&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>sqlserver</category>
    </item>
    <item>
      <title>My TOP resources for .NET &amp; Azure</title>
      <dc:creator>LFC</dc:creator>
      <pubDate>Thu, 29 Aug 2019 16:48:40 +0000</pubDate>
      <link>https://dev.to/luisfernando_ch/my-top-resources-for-net-azure-3l9e</link>
      <guid>https://dev.to/luisfernando_ch/my-top-resources-for-net-azure-3l9e</guid>
      <description>&lt;p&gt;This time, I am going to share my TOP resources about .NET and Azure&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;General&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Docs&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-us/"&gt;https://docs.microsoft.com/en-us/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Learn&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-us/learn/"&gt;https://docs.microsoft.com/en-us/learn/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;.NET Architecture Guides&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://dotnet.microsoft.com/learn/dotnet/architecture-guides"&gt;https://dotnet.microsoft.com/learn/dotnet/architecture-guides&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Browse code samples&lt;/strong&gt;&lt;br&gt;
Get started with Microsoft developer tools and technologies&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-us/samples/browse/"&gt;https://docs.microsoft.com/en-us/samples/browse/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure Architecture Center&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-us/azure/architecture/"&gt;https://docs.microsoft.com/en-us/azure/architecture/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure Application Architecture Guide&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-us/azure/architecture/guide/"&gt;https://docs.microsoft.com/en-us/azure/architecture/guide/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud Design Patterns&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/"&gt;https://docs.microsoft.com/en-us/azure/architecture/patterns/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure Reference Architectures&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/"&gt;https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure Solutions Architectures&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://azure.microsoft.com/en-us/solutions/architecture/"&gt;https://azure.microsoft.com/en-us/solutions/architecture/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get Started with CosmosDB&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.gotcosmos.com"&gt;https://www.gotcosmos.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A collection of simple recommendations for decent Web application frontends&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://roca-style.org"&gt;https://roca-style.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semantic Versioning 2.0.0&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://semver.org/#semantic-versioning-200"&gt;https://semver.org/#semantic-versioning-200&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTTP Status Codes&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://httpstatuses.com/"&gt;https://httpstatuses.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>azure</category>
      <category>microsoft</category>
      <category>cloud</category>
    </item>
    <item>
      <title>How to move a Blob to another Container</title>
      <dc:creator>LFC</dc:creator>
      <pubDate>Mon, 19 Aug 2019 23:33:23 +0000</pubDate>
      <link>https://dev.to/luisfernando_ch/how-to-move-a-blob-to-another-container-5a33</link>
      <guid>https://dev.to/luisfernando_ch/how-to-move-a-blob-to-another-container-5a33</guid>
      <description>&lt;p&gt;In this post, I am going to share a method that moves a blob to another container.&lt;/p&gt;

&lt;p&gt;This content applies for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure Storage Accounts.&lt;/li&gt;
&lt;li&gt;.NET Core 2.2.&lt;/li&gt;
&lt;li&gt;Different containers on the same storage account.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Steps&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I have a CloudStorageAccount object that represents the Azure Storage Account.&lt;/li&gt;
&lt;li&gt;I have a CloudBlobClient object that represents a Blob service.&lt;/li&gt;
&lt;li&gt;In the constructor, CloudStorageAccount and CloudBlobClient are initialized.&lt;/li&gt;
&lt;li&gt;MoveBlob method creates a reference of source container and destination container using GetContainerReference method of CloudBlobClient object.&lt;/li&gt;
&lt;li&gt;I get a blob reference using GetBlockBlobReference method using the previous containers references.&lt;/li&gt;
&lt;li&gt;Finally, I invoke StartCopyAsync method in order to copy the blob to another container, then, the source blob is deleted.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>dotnet</category>
      <category>azure</category>
      <category>storage</category>
      <category>blob</category>
    </item>
    <item>
      <title>Tip for Preventing XSS in ASP.NET</title>
      <dc:creator>LFC</dc:creator>
      <pubDate>Sat, 10 Aug 2019 18:43:04 +0000</pubDate>
      <link>https://dev.to/luisfernando_ch/quick-note-tip-for-preventing-xss-in-asp-net-gi7</link>
      <guid>https://dev.to/luisfernando_ch/quick-note-tip-for-preventing-xss-in-asp-net-gi7</guid>
      <description>&lt;p&gt;I am going to show you an old but useful tip in order to prevent command injection in our forms.&lt;/p&gt;

&lt;p&gt;First of all, We have this line that does not encode HTML:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;In order to encode correctly this output and avoid XSS attacks, you should convert it to this way:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;However, ASP.NET MVC introduces this reduced syntax with the same purpose:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Did you see it?&lt;br&gt;
The key is to replace &amp;lt;%= with &amp;lt;%:&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>asp</category>
      <category>aspnet</category>
      <category>html</category>
    </item>
  </channel>
</rss>
