Wednesday, July 22, 2020

Design Patterns


Wednesday, July 22, 2020

5:45 AM

__________________________________________

Design Patterns & focus in Singleton

__________________________________________

 

 Patterns are about reusable designs and interactions of objects. They are solutions for recurring problems in a given context.

The 23 Gang of Four (GoF) patterns are generally considered the foundation for all other patterns. 

 

The most important part of applying patterns to your codebase is knowing when and where to apply each pattern.

 

Creational Patterns   ABFPS (Abraham Became First President of States).(Republican 😊)

  Abstract Factory

Creates an instance of several families of classes

  Builder

Separates object construction from its representation

  Factory Method

Creates an instance of several derived classes

  Prototype

A fully initialized instance to be copied or cloned

  Singleton

A class of which only a single instance can exist

 

Structural Patterns         (ABCDFFP)

  Adapter

Match interfaces of different classes

  Bridge

Separates an object’s interface from its implementation

  Composite

A tree structure of simple and composite objects

  Decorator

Add responsibilities to objects dynamically

  Facade

A single class that represents an entire subsystem

  Flyweight

A fine-grained instance used for efficient sharing

  Proxy

An object representing another object

 

Behavioral Patterns     2 MICS On TV (MMIICCSSOTV).

  Chain of Resp.

A way of passing a request between a chain of objects

  Command

Encapsulate a command request as an object

  Interpreter

A way to include language elements in a program

  Iterator

Sequentially access the elements of a collection

  Mediator

Defines simplified communication between classes

  Memento

Capture and restore an object's internal state

  Observer

A way of notifying change to a number of classes

  State

Alter an object's behavior when its state changes

  Strategy

Encapsulates an algorithm inside a class

  Template Method

Defer the exact steps of an algorithm to a subclass

  Visitor

Defines a new operation to a class without change

 

 C# Singleton Design Patterns

Where context requires a project calls for only one instance of Object be created and shared between clients, and the client cannot create an instance from outside.

Class of which only a single instance can exist.

 

Creation:

·       Private Constructor

·       Static Instances and methods


With .NET 4 +use the System.Lazy<T> type to make the laziness really simple. Simply pass a delegate to the constructor, that calls the Singleton constructor (done easily with a lambda expression)

 

using System;
 

public sealed class Singleton
{
    //initialize the instance
    private static readonly Lazy<Singleton>
        lazy = new Lazy<Singleton>(() => new Singleton());

    public static Singleton Instance
    {
        get
        {
            Logger.Log("Instance called.");
            return _lazy.Value;
        }
    }

    private Singleton()
    {
        // cannot be created except within this class
        Logger.Log("Constructor invoked.");
    }
}

 

 C# Fundamentals

_____________________________________________________________

 

Dependency Injection

______________________________________________________________

 

ASP.NET Core supports the dependency injection (DI) software design pattern, which is a technique for achieving Inversion of Control (IoC) between classes and their dependencies.

In software engineering, dependency injection is a technique in which an object receives other objects that it depends on. These other objects are called dependencies. In the typical "using" relationship the receiving object is called a client and the passed (that is, "injected") object is called a service

Dependency Inversion and Dependency Injection

Dependency Inversion is one of the core software design principles which we use to create modules that are loosely coupled. While creating applications, we can achieve this using a technique called Dependency Injection. Dependency Injection (DI) is the method of injecting the dependent modules into our classes.

 

We have discussed this in detail in one of our other article Dependency Inversion Principle. There, we discussed the concept of Dependency Injection and how to implement it.

 

So, in this section, we are going to look at the support for Dependency Injection in an ASP.NET Core MVC application.

 

Injecting Dependencies into Controllers

ASP.NET Core supports Dependency Injection(DI) between classes and their dependencies. MVC Controllers request dependencies explicitly via constructors. Furthermore, ASP.NET Core has built-in support for dependency injection, hence making the application easier to test and maintain.

 

We add services as a constructor parameter and the runtime resolves the service from the service container. We typically define services using interfaces.

 

When we implement a repository pattern in the ASP.NET Core MVC application, we make use of Dependency Injection in our controllers. We have explained how to implement a simple data repository in the article section Implementing a simple data repository.

 

Let’s create an ASP.NET Core MVC application and implement a simple data repository as described in the article.

 

First of all, let’s create an interface IDataRepository:

  public interface IDataRepository<TEntity>

    {

        IEnumerable<TEntityGetAll();

        void Add(Employee employee)

    }

 

Then let’s create a class EmployeeManager implementing the IDataRepository interface:

    public class EmployeeManager : IDataRepository<Employee>

    {

        public void Add(Employee employee)

        {

            throw new NotImplementedException();

        }

 

        IEnumerable<EmployeeIDataRepository<Employee>.GetAll()

        {

            return new List<Employee>() {

            new Employee(){ }

             };

        }

    }

Next step is to add the service to the service container. We need to do that in the ConfigureServices() method in the Startup.cs class:

services.AddScoped<IDataRepository<Employee>, EmployeeManager>();

By doing so, we have configured the repository using Dependency Injection.

Next, let’s create the EmployeeController with the Index() action method to get the list of all employees:

   public class EmployeeController : Controller

    {

        private readonly IDataRepository<Employee_dataRepository;

 

        public EmployeeController(IDataRepository<EmployeedataRepository)

        {

            _dataRepository = dataRepository;

        }

 

        public IActionResult Index()

        {

            IEnumera

Microservices ______________________________________________________________

What are microservices?

Microservices are a modern approach to software whereby application code is delivered in small, manageable pieces, independent of others.

Microservices - also known as the microservice architecture - is an architectural style that structures an application as a collection of services that are

•        Highly maintainable and testable

•        Loosely coupled

•        Independently deployable

•        Organized around business capabilities

•        Owned by a small team

Applications built as a set of modular components are easier to understand, easier to test, and most importantly easier to maintain over the life of the application. It enables organizations to achieve much higher agility and be able to vastly improve the time it takes to get working improvements to production.

 

_________________________________________________________

 

 Restful Api

___________________________________________

 

 

What is a RESTful API? - security

One of the most popular types of API is REST or, as they’re sometimes known, RESTful APIs. REST or RESTful APIs were designed to take advantage of existing protocols. While REST - or Representational State Transfer - can be used over nearly any protocol, when used for web APIs it typically takes advantage of HTTP. This means that developers have no need to install additional software or libraries when creating a REST API.

 

One of the key advantages of REST APIs is that they provide a great deal of flexibility. Data is not tied to resources or methods, so REST can handle multiple types of calls, return different data formats and even change structurally with the correct implementation of hypermedia. This flexibility allows developers to build an API that meets your needs while also meeting the needs of very diverse customers.

 

There are 6 key constraints to think about when considering whether a RESTful API is the right type of API for your needs:

•        Client-Server: This constraint operates on the concept that the client and the server should be separate from each other and allowed to evolve individually.

•        Stateless: REST APIs are stateless, meaning that calls can be made independently of one another, and each call contains all of the data necessary to complete itself successfully.

•        Cache: Because a stateless API can increase request overhead by handling large loads of incoming and outbound calls, a REST API should be designed to encourage the storage of cacheable data.

•        Uniform Interface: The key to the decoupling client from server is having a uniform interface that allows independent evolution of the application without having the application’s services, or models and actions, tightly coupled to the API layer itself.

•        Layered System: REST APIs have different layers of their architecture working together to build a hierarchy that helps create a more scalable and modular application.

•        Code on Demand: Code on Demand allows for code or applets to be transmitted via the API for use within the application.

Unlike SOAP, REST is not constrained to XML, but instead can return XML, JSON, YAML or any other format depending on what the client requests. And unlike RPC, users aren’t required to know procedure names or specific parameters in a specific order.

One of the disadvantages of RESTful APIs is that you can lose the ability to maintain state in REST, such as within sessions. It can also be more difficult for newer developers to use.

It’s important to understand what makes a REST API RESTful, and why these constraints exist before building your API.

 

_________________________________________________________

 

  Async and Await in a Nutshell

___________________________________________

 

 The async keyword does two things: it enables the await keyword within that method, and it transforms the method into a state machine (similar to how the yield keyword transforms iterator blocks into state machines). Async methods should return Task or Task<T> when possible. It’s permissible for an async method to return void, but it’s not recommended because it’s very difficult to consume (or test) an async void method.

The task instance returned from an async method is managed by the state machine. The state machine will create the task instance to return, and will later complete that task.

An async method begins executing synchronously. It’s only when the async method reaches an await operator that the method may become asynchronous. The await operator takes a single argument, an “awaitable” such as a Task instance. First, the await operator will check the awaitable to see if it has already completed; if it has, the method continues (synchronously). If the awaitable isn’t yet complete, the await operator will “pause” the method and resume when the awaitable completes. The second thing the await operator does is retrieve any results from the awaitable, raising exceptions if the awaitable completed with an error.

The Task or Task<T> returned by the async method conceptually represents the execution of that method. The task will complete when the method completes. If the method returns a value, the task is completed with that value as its result. If the method throws an exception (and doesn’t catch it), then the task is completed with that exception.

IN Operator Examples (within?)

SELECT * FROM Customers

WHERE Country IN ('Germany', 'France', 'UK');

A stored procedure is a prepared SQL code that you can save, so the code can be reused over and over again.

So if you have an SQL query that you write over and over again, save it as a stored procedure, and then just call it to execute it.

You can also pass parameters to a stored procedure, so that the stored procedure can act based on the parameter value(s) that is passed.

 

Index

C# | Action Delegate

Action delegate is an in-built generic type delegate. This delegate saves you from defining a custom delegate as shown in the below examples and make your program more readable and optimized. It is defined under System namespace. It can contain minimum 1 and maximum of 16 input parameters and does not contain any output parameter. The Action delegate is generally used for those methods which do not contain any return value, or in other words, Action delegate is used with those methods whose return type is void. It can also contain parameters of the same type or of different types.

 

Syntax:

 

// One input parameter

public delegate void Action < in P > (P obj);

 

// Two input parameters

public delegate void Action < in P1, in P2 >(P1 arg1, P2 arg2);

Indexing API

With Indexing API, you can tell Google which pages need to be re-indexed or removed from the index. The request should include the URL of the web page.

 

Sync vs async

Processing Asynchronous Requests

In web applications that sees a large number of concurrent requests at start-up or has a bursty load (where concurrency increases suddenly), making these web service calls asynchronous will increase the responsiveness of your application. An asynchronous request takes the same amount of time to process as a synchronous request. For example, if a request makes a web service call that requires two seconds to complete, the request takes two seconds whether it is performed synchronously or asynchronously. However, during an asynchronous call, a thread is not blocked from responding to other requests while it waits for the first request to complete. Therefore, asynchronous requests prevent request queuing and thread pool growth when there are many concurrent requests that invoke long-running operations.

 

Local Storage

What is local storage?

Local storage is a property for accessing a storage object, which is used to store and retrieve the data from the user’s Browser. It is accessible only at client side and not at Server side like a cookie.

The data stored in local storage is accessible. All the pages are under the same domain, unless the user does not delete it manually. Even though the user closes the Bowser, the data will be accessible next time.

Set local storage

Optimization

·       Benchmark your code

·       Avoid string based conversions

·       Check for empty strings using string.

·       Use arrays

·       Simplify

·       …refactor

·       ..look at threading – parallel

 

Always test?

hash map and abstract class. A coding problem need to solve with recursive method.

write code to determine if a tree is mirror structured.  

Dependency Injection

  Dependency Injection _______________________________________________________  ASP.NET Core supports the dependency injection (DI) software...