9. TRANSACTION SCRIPT
▸ Simple Business Logic
▸ CRUD
▸ Input Validation
▸ Extract Transform Load (ETL)
▸ Simple Data Structures
▸ Always leave the database in a consistent state
17. public class CreateUser {
public void Execute(userDetails) {
try {
DB.StartTransaction();
var user = new User();
user.Name = userDetails.Name;
user.Email = userDetails.Email;
user.Save();
DB.Commit();
} catch {
DB.Rollback();
throw;
}
}
}
18. public class User {
public Guid Id { get; set; }
public string Name { get; set; }
public List<Interest> Interests { get; set; }
public Address Address { get; set; }
public void Save() { … }
public void Delete() { … }
public static User Get(Guid id) { … }
public static List<User> GetAll() { … }
}
24. DOMAIN MODEL
▸ Complex business logic
▸ Model business domain
▸ Objects: data + behavior
▸ Plain objects
▸ Minimal application level use cases
25. public class UpdateUser {
public void Execute(userDetails) {
try {
var user = usersRepository.Get(userDetails.Id);
user.UpdateDetails(userDetails);
usersRepository.Save(user);
} catch {
DB.Rollback();
throw;
}
}
}
26. public class User {
public Guid Id { get; private set; }
public string Name { get; private set; }
public List<Interest> Interests { get; private set; }
public Address Address { get; private set; }
public void UpdateDetails() { … }
public void AddInterest() { … }
public static User InitializeNew() { … }
}
public interface IUsersRepository {
User Get(Guid id);
void Save(User user);
void Delete(User user);
}
29. EVENT SOURCED DOMAIN MODEL
▸ Complex Business Logic
▸ Business rules
▸ Invariants
▸ Complex algorithms
▸ Deals w/ money
▸ Data analysis required
▸ Audit required by law
30. EVENT SOURCED DOMAIN MODEL
PhoneEmailNameId
46464543one@gmail.comJames1
34234343two@gmail.comJohn2
31. public class NewUserInitialized {
public Guid UserId { get; private set; }
public string Name { get; private set; }
public string Email { get; private set; }
}
public class NameChanged {
public Guid UserId { get; private set; }
public string NewName { get; private set; }
}
public class EmailChanged {
public Guid UserId { get; private set; }
public string NewEmail { get; private set; }
}
46. TESTING STRATEGIES
• End to end tests
• API layer tests
• Unit tests
• Unit tests
• Transaction Script
• Active Record
• Domain Model
• Event Sourced Domain Model
51. DECISION HEURISTIC
▸ Is the business logic mostly CRUD / ETL? Yes
▸ Are the data structures simple? yes - Transaction Script
▸ Are the data structures simple? No -Active Record
▸ Is the business logic mostly CRUD / ETL? No
▸ Is advanced analysis required, or dealing w/ money? No
Domain Model
▸ Is advanced analysis required, or dealing w/ money? Yes
Event Sourced Domain Model