-
Use Onion architecture
- Dependencies go inwards. That is, the Core domain doesn't know about outside layers
-
Use pipeline model to implement workflows/use-cases/stories
- Business logic makes decisions
- IO does storage with minimal logic
- Keep Business logic and IO separate
-
Keep IO at edges
using System; | |
using System.Collections.Generic; | |
using System.Collections.Immutable; | |
using System.Linq; | |
using EventStore.Client; | |
namespace BullOak.Repositories.EventStore.Test.Integration | |
{ | |
internal record InspectionId(Guid Id); | |
internal record LicencePlate(string PlateNumber); |
namespace System.Text.Json | |
open System | |
open System.Collections.Generic | |
open System.Text.Json.Serialization | |
// Converts Option<T> to/from JSON by projecting to null or T | |
type OptionValueConverter<'T>() = | |
inherit JsonConverter<'T option>() |
# Import posh-git (if installed via scoop) | |
$poshGitModule = "$HOME\scoop\apps\posh-git\current\posh-git.psd1"; | |
if (Test-Path $poshGitModule) { Import-Module $poshGitModule } | |
# msbuild convenience alias | |
Set-Alias MSBuild 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MSBuild.exe' | |
# bash-style completion | |
Set-PSReadlineKeyHandler -Key Tab -Function Complete | |
#Set-PSReadlineOption -ShowToolTips |
Lost from https://blogs.msdn.microsoft.com/ericgu/2004/01/12/minus-100-points/
When I switched over the C# compiler team, I had hoped that I would be able to give some insight into how the design team works, what decisions we make, etc. Language design is a very esoteric field, and there's not a lot written about it (though “Design and evolution of C++“ is a pretty good read). I had hoped that I would be able to do this with concrete examples, as that makes it much easier.
I've been watching for candidate topics to write about, but haven't yet come up with any good ones. One of the problems is that features have a tendency to morph in design (and in whether they'll make it into Whidbey) as time goes by, and it would be bad for me to say, “we're talking about doing“ and then have us decide it wasn't a good idea. Or, for us to decide that doesn't fit into our schedule, or it would break existing code, or any of the other reasons that might cause us to pull a feature. We're generally not comfortable re
namespace Analogy | |
{ | |
/// <summary> | |
/// This example shows that a library that needs access to target .NET Standard 1.3 | |
/// can only access APIs available in that .NET Standard. Even though similar the APIs exist on .NET | |
/// Framework 4.5, it implements a version of .NET Standard that isn't compatible with the library. | |
/// </summary>INetCoreApp10 | |
class Example1 | |
{ | |
public void Net45Application(INetFramework45 platform) |
To enable parallel build for F# projects in Visual Studio 2013, add a string parameter named IsMultiThreadedBuildEnabled
with value 1
into key HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\Projects\{f2a71f9b-5d33-465a-a702-920d77279786}
(replace 12.0_Config
with 14.0_Config
for VS 2015)
Note: At some point this setting may disappear, it seems Visual Studio may erase it. So, you should check whether it's there before run VS.
#r "System.Windows.Forms.DataVisualization.dll" | |
#r @"..\packages\FSharp.Charting.0.90.7\lib\net40\FSharp.Charting.dll" | |
#r @"..\packages\FSharp.Data.2.0.14\lib\net40\FSharp.Data.dll" | |
open FSharp.Data | |
open FSharp.Charting | |
let wb = WorldBankData.GetDataContext() | |
type Indicator = Runtime.WorldBank.Indicator | |
type Indicators = WorldBankData.ServiceTypes.Indicators |
namespace Newtonsoft.Json.Converters | |
open Microsoft.FSharp.Reflection | |
open Newtonsoft.Json | |
open System | |
type IdiomaticDuConverter() = | |
inherit JsonConverter() | |
[<Literal>] |
#r @"c:\prg\Fuchu\Fuchu\bin\Debug\Fuchu.dll" // https://www.nuget.org/packages/Fuchu/ | |
open System | |
open Fuchu | |
// Write your tests as a list of string * Async<unit> | |
let tests = [ | |
"Check google response", async { | |
use client = new System.Net.WebClient() | |
let! a = client.AsyncDownloadString (Uri("http://www.google.com")) |