Skip to content

Latest commit

 

History

History
84 lines (63 loc) · 1.97 KB

File metadata and controls

84 lines (63 loc) · 1.97 KB

Commando

A helper library for creating command based applications

Command executor is responsible for providing dependencies to commands.

It allows commands to be nested and aggregated without concerning the command logic with dependencies.

The CommandExecutor has a list of "BeforeExecute" actions that allow services or dependencies to be provided to commands.

A quickly typed (will have some typo's) example is shown below, Register a user.

public class RegisterUserCommand : CommandResultBase<int>
{
	public RegisterUserCommand(RegistrationForm registrationForm)
	{
		this.RegistrationForm = registrationForm;
	}
	
	public RegistrationForm Registration {get;set;}

	//ICommand interface
	pubic void Execute()
	{
		var userId = this.Execute(new InsertUserCommand(this.Registration);

		var activationToken = this.Execute(new ResetUserPassword(userId));

		this.Execute(new SendRegistrationEmailCommand(this.Registration, activationToken);

		return userId;
	}
}


public class SendRegistrationEmailCommand : EmailCommandBase
{
	public SendRegistrationEmailCommand(RegistrationForm registrationForm, string token)
	{
		this.RegistrationForm = registrationForm;
		this.Token = token;
	}
	
	public string Token {get;set}
	public RegistrationForm Registration {get;set;}

	public override MailMessage CreateMailMessage()
	{
		/* code to create mail message */
		return new MailMessage(); 
	}
}

public class EmailCommandBase : ICommand
{
	public override void Execute()
	{
		var m = this.CreateMailMessage();
		
		Smtp.Send(m);
		 or
		DbInsert(m)
		 or
		MyServiceProxy.Send(m);
	}

	public abstract MailMessage CreateMailMessage()
}

public class InsertUserCommand : DbCommandBase<int>
{
	public RegisterUserCommand(RegistrationForm registrationForm)
	{
		this.RegistrationForm = registrationForm;
	}
	
	public RegistrationForm Registration {get;set;}

	public override int Execute(IDbConnection db)
	{
		return /* sql to insert user */
	}
}