- use nsdepcop instead of project dependencies for layering so you can keep things in the same project
- generic action result in controllers instead of base type
- explicitly register your controllers rather than letting Controller Activator use them
- ditch your IOC container entirely
- use ValueOf for ids instead of ints
- hard code all non-secret config values each environment in your source code (using code, not json) and choose the right one based off a single 'env' variable
- use OneOf instead of custom Result objects/ Exceptions for control flow
- partition by feature vertical, not layer
- use delegates for your ports/adapters
- isolate your domain and use composition root
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace _10PrintHello.Apps.Things.SirenTables | |
{ | |
public class Comment | |
{ | |
public int postId { get; set; } | |
[Sortable] | |
public int id { get; set; } | |
[Sortable] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using JSIL; | |
using JSIL.Meta; | |
using System.Collections.Generic; | |
using System.Linq; | |
public static class Program { | |
public static void Main () { | |
Dictionary<string, string[]> data = new Dictionary<string, string[]>(){ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.request{ | |
background-color: aliceblue; | |
} | |
.response.status200{ | |
background-color: f5fff0 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void Main() | |
{ | |
var events = new ObservableCollection<Event>(); | |
var state = new NotifyCollection<object>(); | |
events.OnAdd(next => | |
{ | |
if (next is UserWasAdded) | |
{ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MyCustomRazorHostFactory : WebRazorHostFactory | |
{ | |
public override System.Web.WebPages.Razor.WebPageRazorHost CreateHost(string virtualPath, string physicalPath) | |
{ | |
// Implementation stolen from MvcRazorHostFactory :) | |
var host = base.CreateHost(virtualPath, physicalPath); | |
if (!host.IsSpecialPage) | |
{ | |
return new MyCustomRazorHost(virtualPath, physicalPath); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[ComplexType] | |
public class JsonProperty<T> where T : class | |
{ | |
[Required] | |
public string Json { get; private set; } | |
protected JsonProperty() | |
{ | |
this.SerializerSettings = new PolymorphicJsonSerializerSettings(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function() { | |
var __hasProp = {}.hasOwnProperty; | |
(function(factory) { | |
if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') { | |
return factory(require('knockout'), exports); | |
} else if (typeof define === 'function' && define['amd']) { | |
return define(['knockout', 'exports'], factory); | |
} else { | |
return factory(ko, ko.konva = {}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var observify = function (obs, top) { | |
if (!top && !ko.isObservable(obs)) { | |
return; | |
} | |
var object = ko.unwrap(obs); | |
if (Object.prototype.toString.call(object) === "[object Array]") { | |
for (var i = 0; i < object.length; i++) { | |
var v = object[i]; | |
if (!ko.isObservable(v)) { | |
if (Object.prototype.toString.call(v) === "[object Array]") { |
Test scopes
- Unit test - an isolated test around a single 'unit' of code, although that can be anything from a method to a class to a series of (related) classes.
- Component test - same as a unit test
- Isolated test - a test that doesn't do any I/O, i.e. the Ports have been filled with in-memory Adapters
- Integration test - a test that interacts with deployed instances of the code and related services, possiby with some Test Doubles (mocked/faked/stubbed etc).
- End to End test - a test that entirely interacts with deployed instances using public interfaces
- Test-per-class - a convention that there should be one unit test for each class
Uses of tests
NewerOlder