Skip to content

Instantly share code, notes, and snippets.

@dibley1973
Created October 15, 2016 13:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dibley1973/659e79d85e2eb5d4c1705a5e89f5aa9c to your computer and use it in GitHub Desktop.
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#
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