Created
October 15, 2016 13:50
-
-
Save dibley1973/659e79d85e2eb5d4c1705a5e89f5aa9c to your computer and use it in GitHub Desktop.
This is just a dump of code for a post describing status by inheritance in C#
This file contains hidden or 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 abstract class ItemStatus {} | |
public class ProposedStatus : ItemStatus {} | |
public class ActiveStatus : ItemStatus {} | |
public class ObsoleteStatus : ItemStatus {} | |
public class MyShizzler | |
{ | |
public void DoShizzle(ProposedStatus status) { /* Do some Proposed shizzle, or maybe nothing */ } | |
public void DoShizzle(ActiveStatus status) { /* Do some Activeshizzle */ } | |
public void DoShizzle(ObsoleteStatus status) { /* Do some Obsolete shizzle, or maybe nothing */ } | |
} | |
var status = new ActiveStatus(); | |
var shizzler = new MyShizzler(); | |
shizzler.DoShizzle(status); | |
public class DibleyStatus : ItemStatus {} | |
public void DoShizzle(DibleyStatus status) { /* Do some DibleyStatus shizzle, yo */ } | |
public abstract class StatusBuilder | |
{ | |
public abstract ItemStatus Build(); | |
} | |
public class ProposedStatusBuilder : StatusBuilder | |
{ | |
public ProposedStatus Build() { return new ProposedStatus(); } | |
} | |
public class ActiveStatusBuilder : StatusBuilder | |
{ | |
public ActiveStatus Build() { return new ActiveStatus(); } | |
} | |
public class ItemStatusFactory | |
{ | |
private Dictionary<int, StatusBuilder> _builders; | |
public ItemStatusFactory () | |
{ | |
_builders = new Dictionary<int, StatusBuilder>(); | |
} | |
public void AddBuilder(int dbId, StatusBuilder builder) | |
{ | |
_builders.Add(dbId, builder); | |
} | |
public ItemStatus Build(int dbStatus) | |
{ | |
/* probably need some builder availability checking before returning */ | |
var noBuilderFound = !_builders.Keys.Contains(dbStatus); | |
if (noBuilderFound) throw invalidOperationException("No builder found for..."); | |
return _builders[dbStatus].Build(); | |
} | |
} | |
var factory = new ItemStatusFactory(); | |
factory.AddBuilder(0, new ProposedStatusBuilder()); | |
/* I dont like the mangic numbers but the Db status ID needs to get mapped somewhere! */ | |
factory.AddBuilder(1, new ActiveStatusBuilder()); | |
/* yada, yada... */ | |
var status = factory.Build(myDto.StatusId); | |
myentity.Status = status; | |
public class ObsoleteStatusBuilder : StatusBuilder | |
{ | |
public ObsoleteStatus Build() { return new ObsoleteStatus(); } | |
} | |
factory.AddBuilder(2, new ObsoleteStatusBuilder()); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment