overview/principles/ObjectValidation.md
2021-07-26 20:00:08 +02:00

3.7 KiB

Object validation

Validation of objects is essential for the quality of object-oriented programs.

This page provides a rough overview of different techniques and strategies around object validation.

Basics

Object types

The appropriate kind of validation may differ on the kind of object, whether it is

  • mutable or
  • immutable

Validation results

Validation results can be divided into:

  • Detailed: containing a list of violations
  • Simple: reporting just one violation (or even only success/failure), either with a simple or a generic message

Technical possibilities

Most languages are offering the following possibilities for failure handling:

  • Return values
  • Exceptions

Validation time

  • Before object creation
  • After creation (but before actual usage of the data)

Validation patterns

Potential strategies

Strategies for validations after object creation

(From https://enterprisecraftsmanship.com/posts/validation-and-ddd/):

  • The Execute / TryExecute pattern works best for task-based scenarios.
  • For CRUD scenarios, you need to choose between Execute / TryExecute and validation in application services. The choice comes down to purity versus ease of implementation.

Strategies for validations before object creation

  • With (static/class level) validation AND factory method (for less complex cases)
  • Essence pattern (for complex cases)

Strategies for validation results:

  • Detailed, containing a list of violations => for crud operations of multi-field input
  • Simple: reporting one violation either with a simple or a generic message => for task-based operations (user just wants to execute a task and wants to know if the task was successful or not resp. why not)

Technical mechanisms:

  • Return value for “expected” failures
  • Exception for “unexpected” failures

https://stackoverflow.com/questions/99683/which-and-why-do-you-prefer-exceptions-or-return-codes https://stackoverflow.com/questions/5460101/choosing-between-exception-and-return-value https://enterprisecraftsmanship.com/posts/error-handling-exception-or-result/


###Appendix Possibilities for creation of objects (patterns, etc):

  • Constructor
  • Factory method (e.g. create method)
  • Factory
  • Builder
  • Essence
  • Other creational patterns: Prototype, Object Pool, Abstract Factory, Singleton