Skip to content

Instantly share code, notes, and snippets.

View Finglas's full-sized avatar

Shaun Finglas Finglas

  • UK
View GitHub Profile
@Finglas
Finglas / configuration.example.cs
Created April 26, 2016 06:26
Configuration Example
// Bad example of configuration.
class BlogPosts
{
// The class is coupled to the standard library configuration. Testing and handling
// future changes is hard.
public Posts FetchAll()
{
Uri url = ConfigurationManager.AppSettings["blogPostsUrl"];
// Fetch using url.
@Finglas
Finglas / instance.renderer.cs
Last active March 15, 2016 07:36
Instance Renderer
class InstanceRenderer : IRender
{
public void Render()
{
// Render game...
}
}
// Usage
var instanceRenderer = new InstanceRenderer();
@Finglas
Finglas / static.class.cs
Last active March 15, 2016 07:23
Static Class
// Cannot implement interface. Unable to pass this around.
static class StaticRenderer
{
public static void Render()
{
// Render game...
}
}
// Usage within Game
@Finglas
Finglas / singleton.renderer.cs
Last active March 15, 2016 07:23
SingletonRenderer
class SingletonRenderer : IRender
{
private static SingletonRenderer instance;
// Prevents the class from being instantiated without getting
// an instance via the Instance method.
private SingletonRenderer() { }
public static SingletonRenderer Instance
{
@Finglas
Finglas / validation.service.results.cs
Created January 13, 2016 19:47
Validation Service Results
public class ValidationResults
{
public ValidationResults(List<Error> errors)
{
this.Errors = errors;
}
public List<Error> Errors { get; private set; }
public static ValidationResults Empty()
@Finglas
Finglas / validation.service.cs
Last active January 13, 2016 19:47
Validation Service
public class RootValidator
{
private readonly IValidator[] validators;
public RootValidator(params IValidator[] validators)
{
this.validators = validators;
}
public ValidationResults Validate(OrderInformation request)
@Finglas
Finglas / attribute.validation.cs
Created January 12, 2016 08:02
Attribute Validation
class OrderInformation
{
[Required]
public BillingAddress BillingAddress { get; set; }
public bool BillingAddressSameAsDelivery { get; set; }
// More properties...
}
@Finglas
Finglas / anti.if.domain.refactored.cs
Last active December 15, 2015 07:23
Anti If Domain Example
public void Domain(RedemptionService service) {
IRedemptionResult result = service.Redeem();
result.Process(this);
}
@Finglas
Finglas / anti.if.refactored.cs
Last active December 15, 2015 07:10
Anti If Example Refactored
public IRedemptionResult Redeem() {
if (httpStatus == 200) {
// Code...
new SuccessfulRedemption();
}
else {
// Parse errors
return new RedemptionFailure(errors)
}
}
@Finglas
Finglas / anti.if.example.2.cs
Last active December 15, 2015 07:24
Anti If Example 2
public void Domain(RedemptionService service) {
Result result = service.Redeem();
if (result.Success) {
// Domain logic for success
}
else {
// Domain logic for failure
}
}