An Address is a good example of a value object. Both addresses with the same attributes will always be the same.
A User is a good example for an entity. It has an identity and even if two different users have same attributes, it will not be a match.
| <TargetFrameworks> | |
| <Framework name="net451" /> | |
| <Framework name="netcoreapp1.0"> | |
| <Dependencies> | |
| <PackageReference Include="Microsoft.NETCore.App" Version="1.1.0" /> | |
| </Dependencies> | |
| </Framework> | |
| </TargetFrameworks> |
| // getProducts connects to DB to retrieve the products | |
| // getRevenue connects to DB to retrieve revenue based on the product attributes | |
| // convertRevenue and calculateProfit are pure functions | |
| // saveProfit writes the calculated profit to a DB | |
| getProducts 1 |> | |
| getRevenue |> | |
| convertRevenue |> | |
| calculateProfit |> | |
| saveProfit |
| using System; | |
| /// <summary> | |
| /// Wraps a reference type value which should not be null. | |
| /// </summary> | |
| /// <typeparam name="T"></typeparam> | |
| public struct NonNullable<T> where T : class | |
| { | |
| private readonly T _value; |
| using System; | |
| using System.IO; | |
| using System.Linq; | |
| namespace ConsoleApplication4 | |
| { | |
| // see: http://stackoverflow.com/a/6371533/463785 | |
| // see: http://stackoverflow.com/questions/1281620/checking-for-directory-and-file-write-permissions-in-net | |
| class Program |
| // Based on: | |
| // - Getting Started with Neo4j in .NET with Neo4jClient Library: http://www.tugberkugurlu.com/archive/getting-started-with-neo4j-in--net-with-neo4jclient-library | |
| // Other links: | |
| // - Neo4j: http://neo4j.com/ | |
| // - Neo4j .NET Client: https://github.com/Readify/Neo4jClient | |
| // - Cypher query language: http://neo4j.com/developer/cypher-query-language/ | |
| public class Agency { public string Name { get; set; } } | |
| public class Person { public string Name { get; set; } } |
| let randomString len = | |
| let chars = "ABCDEFGHIJKLMNOPQRSTUVWUXYZ0123456789" | |
| let charsLength = chars.Length | |
| let random = System.Random() | |
| let randomChars = [|for i in 0..len -> chars.[random.Next(charsLength)]|] | |
| new System.String(randomChars) |
| public class ClaimsPrincipalParameterBinding : HttpParameterBinding | |
| { | |
| public ClaimsPrincipalParameterBinding(HttpParameterDescriptor descriptor) | |
| : base(descriptor) | |
| { | |
| } | |
| public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken) | |
| { | |
| ClaimsPrincipal claimsPrincipal = actionContext.Request.GetRequestContext().Principal as ClaimsPrincipal; |
| # List all stopped containers | |
| docker ps --filter "status=exited" | |
| # Remove all stopped containers | |
| docker rm $(docker ps --filter "status=exited" -aq --no-trunc) | |
| # Remove all unused images (http://stackoverflow.com/a/32723127) | |
| docker rmi $(docker images --filter "dangling=true" -q --no-trunc) |
Continuous delivery is a huge step forward in our ability to rapidly deliver features and value to the users of distributed applications, but it comes with a cost and a responsibility. Most modern web applications need to be highly available, and this also means that it should be up during the deployments. Dealing with zero-downtime deployments is a challenge, and there is no easy solution. Moreover, the solutions available vary based on the number of integrated clients, which parts of the World it addresses, how many active users it has... Isn’t there a simple way to figure out how to get there?
Join me to get into the details of the key steps on your path to zero downtime deployments. Learn about the patterns, practices and techniques that make it easier, such as semantic versioning and blue/green deployments. We’ll also walk through an end-to-end demo of how a high traffic web application can survive the challenge of deployments.
What seemed insurmounta