-> to have guidance/reference architecture/rules/vision:
- we have those layers...
- you should put your module (project) here
-> teach developers to use these guidelines (see also this article)
-> communicate and enforce
-> take in consideration resistance and ignorance
-> devs tend to consider their problems as being unique, not matching any guidance.
Ways to enforce architectural rules:
- Code inspection (code smells, code does not follow the rules)
- analyze the code structure: e.g.: do not let view layer code call directly the DB ... , code complexity (no. of dlls, classes, methods, inheritance levels), class diagram, multithreading issues, performance
- use assert/tests to check code dynamically (at run time)
- check program flow
- ZERO compiler warnings in code
- fix issues as they arise.
-> automate enforcement of architecture rules