-
Notifications
You must be signed in to change notification settings - Fork 10
1.1 Business process
Marjan Nikolovski edited this page Apr 9, 2021
·
1 revision
All business logic is placed in a single layered unit called a business process. The business process represents a logical unit that handles a single business requirement that can be easily reused throught our application.
The business process contains 3 layers:
- Auth
- Validate
- Handle
public class MyBusinessProcess : BusinessProcess<int, int, int, VoidResult>
{
/// <summary>
/// Auth process
/// </summary>
/// <param name="input1"></param>
/// <param name="input2"></param>
/// <param name="input3"></param>
/// <returns></returns>
public override VoidResult Auth(int input1, int input2, int input3)
{
return Ok();
}
/// <summary>
/// Validate process
/// </summary>
/// <param name="input1"></param>
/// <param name="input2"></param>
/// <param name="input3"></param>
/// <returns></returns>
public override VoidResult Validate(int input1, int input2, int input3)
{
return BeginValidation()
.Validate(new MySpecification1(), input1);
.Validate(new MySpecification2(), input2);
.Validate(new MySpecification3(), input3)
.ReturnResult();
}
/// <summary>
/// Handle process
/// </summary>
/// <param name="input1"></param>
/// <param name="input2"></param>
/// <param name="input3"></param>
/// <returns></returns>
public override VoidResult Handle(int input1, int input2, int input3)
{
return Ok();
}
}
- 0 to 3 in generic arguments
- VoidResult, MethodResult or ListResult out generic argument
- SignalsAuthorizeProcess and Critical attributes
- Validation with specification pattern
public class RegisterUser : BusinessProcess<User, MethodResult<int>>
{
[Import] private IUserRepository UserRepository { get; set; }
/// <summary>
/// Auth process
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public override MethodResult<int> Auth(User user)
{
return Ok();
}
/// <summary>
/// Validate process
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public override MethodResult<int> Validate(User user)
{
return BeginValidation()
.Validate(new UserHasUsernameAndPassword(), user)
.ReturnResult();
}
/// <summary>
/// Handle process
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public override MethodResult<int> Handle(User user)
{
var userId = UserRepository.Register(user);
return userId;
}
}